У меня есть шаблон формы, который я буду дублировать по мере необходимости, изменять и рассылать для ответов.Я написал скрипт для электронной таблицы связанных ответов, который определенным образом реорганизует данные ответов.Сам скрипт работает нормально, и его нужно запускать только на моем аккаунте.
Проблема в том, что скрипт привязан к электронной таблице, а не к форме;но дублируется форма, а не электронная таблица.Я попытался связать свой сценарий с шаблоном формы и использовать приведенный ниже код для создания связанной электронной таблицы и копирования сценария.Я настроил триггер для запуска этой функции при отправке формы, но триггер исчезает, когда шаблон формы дублируется.Этот код в значительной степени скопирован из этого ответа: https://stackoverflow.com/a/48353155/12131953 с несколькими строками, добавленными в начале для создания связанной электронной таблицы.
function copyScript() {
//create destination spreadsheet
var form = FormApp.getActiveForm();
var ss = SpreadsheetApp.create(form.getTitle() + " (Responses)");
form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
var srcProjectId = "###my project id###"; // Source project ID
var dstGoogleDocsId = ss.getId(); // Destination spreadsheet ID
var baseUrl = "https://script.googleapis.com/v1/projects";
var accessToken = ScriptApp.getOAuthToken();
// Retrieve filename of bound-script project.
var srcName = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + srcProjectId, {
method: "get",
headers: {"Authorization": "Bearer " + accessToken}
}).getContentText()).title;
// Retrieve bound-script project.
var obj = UrlFetchApp.fetch(baseUrl + "/" + srcProjectId + "/content", {
method: "get",
headers: {"Authorization": "Bearer " + accessToken}
}).getContentText();
// Create new bound script and retrieve project ID.
var dstId = JSON.parse(UrlFetchApp.fetch(baseUrl, {
method: "post",
contentType: 'application/json',
headers: {"Authorization": "Bearer " + accessToken},
payload: JSON.stringify({"title": srcName, "parentId": dstGoogleDocsId})
}).getContentText()).scriptId;
// Upload a project to bound-script project.
var res = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + dstId + "/content", {
method: "put",
contentType: 'application/json',
headers: {"Authorization": "Bearer " + accessToken},
payload: obj
}).getContentText());
}
Затем я попытался программно создать триггер при дублировании формыоткрыт, но, насколько я могу судить, создание устанавливаемых триггеров находится за пределами полномочий простого триггера onOpen.
function onOpen(); {
ScriptApp.newTrigger("copyScript").forForm(FormApp.getActiveForm()).onFormSubmit().create();
.
.
.
}
Я не являюсь разработчиком и самоучка этому делу;Я довольно хорошо разбираюсь в аспекте сценариев, но совсем не знаком с API и веб-развертываниями.
Поэтому мой вопрос: Есть ли способ скопировать скрипт в новый, связанный с формойэлектронная таблица из формы? Я также согласен с решением, которое каким-то образом применяет мой скрипт (может быть, как отдельный) ко всем новым электронным таблицам, потому что код создает пункт меню;поэтому сделать сценарий дополнением может быть ответом здесь, но это кажется излишним для сценария, который может запустить только один человек.