Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本持久性_Google Apps Script_Persistence - Fatal编程技术网

Google apps script 谷歌应用程序脚本持久性

Google apps script 谷歌应用程序脚本持久性,google-apps-script,persistence,Google Apps Script,Persistence,背景:我有一个谷歌网站,我一直在从包含我学生成绩的谷歌电子表格中提取信息,但我想让它更具动态性,以便他们可以随时要求提供所有当前成绩的报告。在我编写的脚本中,学生将输入密码,单击按钮,然后生成他们的分数 问题:据我所知,当他们单击按钮时,按钮的处理程序会导致脚本重新运行。当前电子表格无法存储,当我尝试访问电子表格时,它告诉我它为空。如何再次访问电子表格?我尝试过使用ScriptProperties,但得到了相同的结果。顺便说一句,如果我不尝试将其作为一个webapp运行,它就会工作 下面是doG

背景:我有一个谷歌网站,我一直在从包含我学生成绩的谷歌电子表格中提取信息,但我想让它更具动态性,以便他们可以随时要求提供所有当前成绩的报告。在我编写的脚本中,学生将输入密码,单击按钮,然后生成他们的分数

问题:据我所知,当他们单击按钮时,按钮的处理程序会导致脚本重新运行。当前电子表格无法存储,当我尝试访问电子表格时,它告诉我它为空。如何再次访问电子表格?我尝试过使用ScriptProperties,但得到了相同的结果。顺便说一句,如果我不尝试将其作为一个webapp运行,它就会工作

下面是doGet()函数和getPassword()函数的一部分,一旦按下UI上的按钮,就会调用该函数

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)”结尾