Мой скрипт программно создает форму Google и устанавливает место назначения для текущей электронной таблицы:
var sheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
var form = FormApp.create(acctName).setTitle(acctName).setDestination(FormApp.DestinationType.SPREADSHEET, sheetId);
// several form items added here
Затем я хотел бы переименовать лист назначения и внести несколько изменений в форматирование. Когда я делаю, однако, лист, кажется, не существует. Например, getSheets()
не содержит новый лист! (И да, в идеале я хотел бы открыть лист по идентификатору; см. Функцию ниже, которая также не работает.)
var sheets = SpreadsheetApp.openById(form.getDestinationId()).getSheets();
SpreadsheetApp.setActiveSheet(sheets[0]);
Приведенный выше код открывает то, что я считаю индексом 1, а не индексом 0 потому что лист не проиндексирован. Я даже пытался создать задержку в несколько секунд (надеясь, что это просто вопрос времени, чтобы позволить syn c происходить между клиентом и сервером), но безуспешно.
Я также пробовал что-то вроде следующее, как предлагается в другом месте здесь, при переполнении стека, но лист назначения не появляется в getSheets()
, даже когда вызывается через отдельную функцию:
function getFormDestinationSheetId(form) {
var destinationId = form.getDestinationId();
if(destinationId) {
var spreadsheet = SpreadsheetApp.openById(destinationId);
spreadsheet.getSheets().forEach(
function(sheet) {
var sheetFormUrl = sheet.getFormUrl();
if(sheetFormUrl) {
var sheetForm = FormApp.openByUrl(sheetFormUrl);
if(sheetForm.getId() == form.getId()) {
return sheet.getSheetId();
}
}
}
);
}
return null;
}
Я не смог никого найти есть похожая проблема на веб-сайтах. Любой совет будет принят во внимание. Спасибо!