为什么 Google Apps 脚本不更新电子表格中的工作表数量?
Why does Google Apps Scripts not update number of sheets in a spreadsheet?
我有一个 Google Apps 脚本,可以制作电子表格,制作一堆表格,并将这些表格链接到该电子表格。接下来我要做的是修改电子表格、重新排列工作表、更改工作表名称等。我的问题是我的电子表格似乎没有更新以确认表单中的新工作表,直到整个脚本完成。
这是我的代码:
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 所建议的那样,SpreadsheetApp.flush()
解决了问题:
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());
}
我有一个 Google Apps 脚本,可以制作电子表格,制作一堆表格,并将这些表格链接到该电子表格。接下来我要做的是修改电子表格、重新排列工作表、更改工作表名称等。我的问题是我的电子表格似乎没有更新以确认表单中的新工作表,直到整个脚本完成。
这是我的代码:
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 所建议的那样,SpreadsheetApp.flush()
解决了问题:
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());
}