[英]getSheets() Google Apps Script multiple calls issue
(为了这篇文章的目的,我将谷歌电子表格中的每个“工作表”称为标签,我发现在阅读时命名约定令人困惑)
在 Google Sheets 插件中,我试图创建一个设置过程,允许用户根据该表单的提示输入 Google 表单的链接(我不只是将所有 ID 拉入手动代码是使用的表单本身可能会因用户而异),并将该表单的响应链接到电子表格,然后使用预先分配的名称重命名该选项卡。
无论出于何种原因,每当我getSheets()
调用getSheets()
函数时,调用的返回值与第一次调用的返回值相同。 例如,如果我有 3 个标签,名为“第一、第二、第三”并且我运行了附加的代码, sheetList
正确返回为[first, second, third]
。 但是,说在for
循环期间,添加了一个选项卡(作为链接表单的结果),然后我再次调用getSheets()
以获取新的第一个选项卡(应该是链接的表单数据),返回的仍然是[first]
不知道从哪里开始,这是应用程序脚本的问题吗? 还是我的方法? 任何提示或建议将不胜感激。
const separateSheetNames = [
"English Household Information",
"English Camper Information",
"English Parent Signatures",
"English Household Number Recovery",
"Spanish Household Information",
"Spanish Camper Information",
"Spanish Parent Signatures",
"Spanish Household Number Recovery"
];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetList = []
ss.getSheets().forEach(function(val){sheetList.push(val.getName())});
for (i=0;i<separateSheetNames.length;i++){
var ui = SpreadsheetApp.getUi();
var currentSheetName = separateSheetNames[i]
var isAlreadySheet = sheetList.indexOf(currentSheetName)
if (isAlreadySheet == -1){
var formUrl = ui.prompt('Paste the link for the ' + currentSheetName + ' form').getResponseText()
var form = FormApp.openByUrl(formUrl)
const ssId = ss.getId();
form.setDestination(FormApp.DestinationType.SPREADSHEET, ssId)
var firstsheet = ss.getSheets()[0]
console.log('firstSheetName ' + firstsheet.getName())
firstsheet.setName(currentSheetName)
var currentSheetLastCol = ss.getSheetByName(currentSheetName).getLastColumn()+1
ss.getSheetByName(currentSheetName).getRange(1,currentSheetLastCol).setValue('Row in Combined Data')
}
}
将此留给可能遇到类似问题的任何其他人-@TheMaster 提供的解决方案完美运行:
在getSheets()
调用之前尝试SpreadsheetApp.flush()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.