Google apps script 谷歌应用程序脚本持久性
背景:我有一个谷歌网站,我一直在从包含我学生成绩的谷歌电子表格中提取信息,但我想让它更具动态性,以便他们可以随时要求提供所有当前成绩的报告。在我编写的脚本中,学生将输入密码,单击按钮,然后生成他们的分数 问题:据我所知,当他们单击按钮时,按钮的处理程序会导致脚本重新运行。当前电子表格无法存储,当我尝试访问电子表格时,它告诉我它为空。如何再次访问电子表格?我尝试过使用ScriptProperties,但得到了相同的结果。顺便说一句,如果我不尝试将其作为一个webapp运行,它就会工作 下面是doGet()函数和getPassword()函数的一部分,一旦按下UI上的按钮,就会调用该函数Google apps script 谷歌应用程序脚本持久性,google-apps-script,persistence,Google Apps Script,Persistence,背景:我有一个谷歌网站,我一直在从包含我学生成绩的谷歌电子表格中提取信息,但我想让它更具动态性,以便他们可以随时要求提供所有当前成绩的报告。在我编写的脚本中,学生将输入密码,单击按钮,然后生成他们的分数 问题:据我所知,当他们单击按钮时,按钮的处理程序会导致脚本重新运行。当前电子表格无法存储,当我尝试访问电子表格时,它告诉我它为空。如何再次访问电子表格?我尝试过使用ScriptProperties,但得到了相同的结果。顺便说一句,如果我不尝试将其作为一个webapp运行,它就会工作 下面是doG
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("MyGui"));
var panel = app.getElementById("VerticalPanel1");
var text = app.createPasswordTextBox().setName("text");
var handler = app.createServerHandler("getResults").addCallbackElement(text);
panel.add(text);
panel.add(app.createButton("Get Record", handler));
SpreadsheetApp.getActiveSpreadsheet().show(app);
}
function getResults(eventInfo) {
var app = UiApp.createApplication();
var password = eventInfo.parameter.text;
var panel = app.getElementById("VerticalPanel1");
var textArea = app.createRichTextArea();
panel.add(textArea);
var pointsSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var passwordCheckRange = pointsSheet.getRange("B70:C94").getValues();
...
问题可能是,当脚本作为webapp运行时,没有“activeSpreadSheet” 所以 电子表格app.getActiveSpreadsheet().getActiveSheet(); 失败。另一种方法是将隐藏字段中的电子表格id传递给回调 在doGet函数中:
var hidden = app.createHidden('ssId', 'YOUR_SS_ID_HERE');
panel.add(hidden);
var handler = app.createServerHandler("getResults").addCallbackElement(text);
handler.addCallbackElement(hidden)`
在回调函数中
var ssID = eventInfo.parameter.ssId;
var pointsSheet = SpreadsheetApp.openById(ssID).getSheetByName('SHEET_NAME');
您不需要将ID作为参数传递,它是一个随时可用的常量值。另一方面,webapp doGet函数不应以“show(app)”结尾