[英]Google Sheets App Script Mysterious Error
我正在教一门课程,对于我的课程,我将所有学生的成绩保存在Google电子表格中。 我想在我的网站上向学生个人介绍信息。 我创建了一个应用程序,其中向他们显示了密码文本框。 他们输入密码,然后从电子表格中检索唯一的信息,并以标签的形式显示给他们。 我一直在尝试将所有内容全部破解,但是它无法正常工作,并且出现了我无法诊断的错误。 如果我使用Browser.msgBox()打印出该信息,则会输出该信息,否则会生成错误。 为什么会发生这种情况,解决方法是什么? 这是代码:
var pointsSheet = SpreadsheetApp.openById('1o8_f063j1jYZjFEnI_P7uAztpnEAvQ6mc3Z1_Owa69Y');
//creates and shows an app with a label and password text box
function doGet() {
var app = UiApp.createApplication().setTitle('Incomplete Challenges');
var mygrid = app.createGrid(1, 2);
mygrid.setWidget(0, 0, app.createLabel('Password:'));
mygrid.setWidget(0, 1, app.createPasswordTextBox().setName("text"));
var mybutton = app.createButton('Submit');
var submitHandler = app.createServerClickHandler('getResults');
submitHandler.addCallbackElement(mygrid);
mybutton.addClickHandler(submitHandler);
var mypanel = app.createVerticalPanel();
mypanel.add(mygrid);
mypanel.add(mybutton);
app.add(mypanel);
SpreadsheetApp.getActiveSpreadsheet().show(app);
//return app; //UNCOMMENT WHEN DEPLOYING APP
}
//obtains data based on password entered by user and outputs their info
function getResults(eventInfo) {
var app = UiApp.createApplication().setTitle('Incomplete Challenges');
var password = eventInfo.parameter.text;
var passwordCheckRange = pointsSheet.getRange("B34:C34").getValues();
if (passwordCheckRange == null) {
Browser.msgBox("Error: Range is null");
return app;
}
var name;
for(var i = 0; i < passwordCheckRange.length; i++) {
if(passwordCheckRange[i][1] == password) {
name = passwordCheckRange[i][0];
break;
}
}
var studentRecordRange = pointsSheet.getRange("B3:AY29").getValues();
var headingRange = pointsSheet.getRange("B1:AY2").getValues();
if (studentRecordRange == null) {
Browser.msgBox("Error: Range is null");
return app;
}
var requestedRecord;
for(var i = 0; i < studentRecordRange.length; i++) {
if(studentRecordRange[i][0] == name)
requestedRecord = studentRecordRange[i];
}
var stringRecord = "";
for(var i = headingRange[1].length-1; i >= 7; i--) {
if (requestedRecord[i] == "")
stringRecord += headingRange[1][i] + ": " + headingRange[0][i] + "XP" + "\\n";
}
var mygrid = app.createGrid(2, 1);
mygrid.setWidget(0, 0, app.createLabel('INCOMPLETE CHALLENGES'));
mygrid.setWidget(1, 0, app.createLabel(stringRecord));
var mypanel = app.createVerticalPanel();
mypanel.add(mygrid);
app.add(mypanel);
//Browser.msgBox(stringRecord);
return app;
}
我遇到的错误是: 遇到的错误:发生意外的错误。
如您所见,它非常有用。
第28行应为getActiveApplication ()而不是createApplication() 。 您不能在另一个应用程序上创建一个应用程序。 :)
我也认为第63行应该是"<br>";
改为“ \\ n”; 与第68行一起应该是createHTML而不是createLabel
我还认为您已经应用了少量样式CSS,因此您的应用看起来不错。 检查UiApp中的.setStyleAttributes。
这段代码中有一些错误,第一个-生成您得到的错误-是(如其他答案所述UiApp.createApplication()
处理程序函数中的UiApp.createApplication()
。
您无法在处理函数中创建UiApp实例,而应该获取活动实例并最终向其中添加元素(使用UiApp.getActiveApplication()
)。
您既不能更改该实例的标题。 顺便说一句,这没有意义,因为当您将该应用程序部署为Webapp时,该标题不会显示为“ title”。 它会简单地显示在浏览器窗口的顶部(作为页面标题),因为您的应用将占据整个屏幕,而不再是模式弹出窗口。 因此,如果您希望标题出现在Ui中,只需将其添加为HTML小部件,即可在其中选择字体大小和粗细(以及其他任何CSS样式)。
另一个错误是密码检查,您正在使用Browser.msgBox("Error: Range is null");
但浏览器类无法在UiApp中使用。 您应仅使用UiApp元素,而不应使用spreadSheetApp元素。
并且,作为更一般的评论,我建议您使用应用程序的.dev URL(最后保存的版本)直接测试您的应用程序(保存测试版并部署之后),以使您处于“实际”使用状态并对结果进行适当的评估。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.