繁体   English   中英

getSheets() Google Apps Script 多次调用问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM