【发布时间】:2020-03-23 17:56:16
【问题描述】:
(为了这篇文章的目的,我将谷歌电子表格中的每个“表格”称为标签,我发现命名约定在阅读时会令人困惑)
在 Google 表格插件中,我正在尝试创建一个设置过程,允许用户根据该表单的提示输入 Google 表单的链接(我不只是拉出所有代码中的 ID 是手动使用的表单本身可能会因用户而异),并将该表单的响应链接到电子表格,然后使用预先分配的名称重命名该选项卡。
无论出于何种原因,每当我多次调用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')
}
}
【问题讨论】:
-
在
getSheets()呼叫之前尝试SpreadsheetApp.flush()。 -
@TheMaster 的工作就像一个魅力,谢谢!
标签: javascript google-apps-script google-sheets synchronization google-forms