getSheets () Google Apps Script проблема с несколькими вызовами

(Для целей этого поста я буду ссылаться на каждый «лист» в электронной таблице Google как на вкладку. Я считаю, что соглашение об именах вводит в заблуждение при чтении)

В дополнении к Google Sheets я пытаюсь создать процесс настройки, который позволит пользователю ввести ссылку на форму Google на основе запроса этой формы (по этой причине я не просто перетаскиваю все идентификаторы в Код вручную заключается в том, что сами используемые формы могут меняться от пользователя к пользователю), и ответы этой формы должны быть связаны с электронной таблицей, а затем переименовать эту вкладку с предварительно назначенным именем.

По любой причине, всякий раз, когда я вызываю 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')
    }
  }

Всего 1 ответ


Оставьте это для всех, кто может столкнуться с подобной проблемой - решение, предложенное @TheMaster, работает отлично:

попробуйте SpreadsheetApp.flush() перед getSheets() .


Есть идеи?

10000