(Для целей этого поста я буду ссылаться на каждый «лист» в электронной таблице Google как на вкладку, я считаю, что соглашение об именах вводит в заблуждение при чтении)
В надстройке Google Sheets- Я пытаюсь создать процесс установки, который позволит пользователю ввести ссылку на форму Google на основе приглашения для этой формы (причина, по которой я не просто извлекаю все идентификаторы в код вручную, заключается в том, что формы используемые сами по себе данные могут меняться от пользователя к пользователю), и ответы этой формы должны быть связаны с электронной таблицей, а затем переименовывать эту вкладку с предварительно назначенным именем.
По любой причине, всякий раз, когда я вызываю getSheets()
функция более одного раза, возвращаемое значение от вызова является таким же, как и то, что возвращение было от первого вызова. Например, если у меня было 3 вкладки с именем «первая, вторая, третья» и я запустил прикрепленный код, sheetList
правильно возвращается как [first, second, third]
. Но, скажем, во время for
l oop добавляется вкладка (в результате связывания формы), и я затем снова вызываю getSheets()
, чтобы получить новую первую вкладку (должны быть связаны данные формы), что все еще возвращает [first]
Не знаете, откуда go, это проблема со скриптом приложения? Или мой подход? Любые советы или рекомендации будут оценены.
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')
}
}