getSheets() Google Apps 脚本多次调用问题

getSheets() Google Apps Script multiple calls issue

(出于此 post 的目的,我将 google 电子表格中的每个 "sheet" 称为选项卡,我发现命名约定在阅读时会造成混淆)

在 Google 表格附加组件中,我正在尝试创建一个设置过程,允许用户根据提示输入 Google 表单的 link对于该表单(我不只是将所有 ID 手动拉入代码的原因是所使用的表单本身可能因用户而异),并将该表单的响应 linked 到电子表格,然后使用预先指定的名称重命名该选项卡。

无论出于何种原因,每当我多次调用 getSheets() 函数时,调用的 return 值与第一次调用的 return 的值相同.例如,如果我有 3 个选项卡,名为 "first, second, third" 并且我 运行 附加代码,sheetList 正确地 return 编辑为 [first, second, third]。但是,假设在 for 循环期间,添加了一个选项卡(作为 linking 表单的结果),然后我再次调用 getSheets() 以获取新的第一个选项卡(应该是linked 表单数据),returns 仍然是 [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()