Google apps script 为什么谷歌应用程序脚本不更新电子表格中的工作表数量?

Google apps script 为什么谷歌应用程序脚本不更新电子表格中的工作表数量?,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我有一个GoogleApps脚本,它可以生成一个电子表格,生成一组表单,并将这些表单链接到该电子表格。接下来我要做的是修补电子表格、重新排列表格、更改表格名称等。我的问题是,在整个脚本完成之前,我的电子表格似乎不会更新以确认表单中的新表格 这是我的密码: function mwe() { var ss = SpreadsheetApp.create("Spreadsheet"); var form1 = FormApp.create("Form 1"

我有一个GoogleApps脚本,它可以生成一个电子表格,生成一组表单,并将这些表单链接到该电子表格。接下来我要做的是修补电子表格、重新排列表格、更改表格名称等。我的问题是,在整个脚本完成之前,我的电子表格似乎不会更新以确认表单中的新表格

这是我的密码:

function mwe() {
  var ss = SpreadsheetApp.create("Spreadsheet");
  var form1 = FormApp.create("Form 1");
  var form2 = FormApp.create("Form 2");
  Logger.log(ss.getNumSheets());
  form1.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  Logger.log(ss.getNumSheets());
  form2.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  Logger.log(ss.getNumSheets());
}
以下是我的输出:

Info    1.0
Info    1.0
Info    1.0
如果我记录电子表格的id,我可以创建一个新脚本:

function mwe2() {
  var ss = SpreadsheetApp.openById("[redacted]");
  Logger.log(ss.getNumSheets());
}
这具有预期的输出:

Info    3.0
有人知道这是为什么吗?我尝试过存储id,用该id重新打开电子表格,并记录该变量中的工作表数量,但除非运行新脚本,否则我总是得到相同的结果。

正如Cooper所建议的,解决了问题:

function mwe() {
  var ss = SpreadsheetApp.create("Spreadsheet");
  var form1 = FormApp.create("Form 1");
  var form2 = FormApp.create("Form 2");
  Logger.log(ss.getNumSheets());
  form1.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  SpreadsheetApp.flush();
  Logger.log(ss.getNumSheets());
  form2.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
  SpreadsheetApp.flush();
  Logger.log(ss.getNumSheets());  
}

不确定,但尝试使用SpreadsheetApp.flush()阅读
flush()
的文档可以很好地解释为什么会这样做:挂起的更改不会立即应用,因为成批执行这些更改有助于提高性能。如果你想写下来作为答案,我会把它标记为接受。@Cooper好的!我认为只有在对工作表本身进行更改时才使用此选项。我也不知道,我只是在猜测。但我知道如果我错了,我会很快发现。这是我会尝试的。在设置表单的目标后,需要刷新。我刚刚运行了这段代码,它三次都输出了1.0。@PiFisher我更新了我的答案。让我知道它现在是否工作。是的,现在可以工作了(在修复
SpreadsheetApp
中缺少的
r
之后)。