Дублированная копия с использованием функции file.makeCopy () (Google Apps Script) - PullRequest
0 голосов
/ 29 февраля 2020

У меня проблема с функцией file.makeCopy(name, destination). У меня есть форма и шаблон электронной таблицы в папке. Я хочу скопировать их в другой каталог. Вот мой код:

  // Create the destination folder
  var newFolder = parentFolder.createFolder(institute + " - a.s. " + schoolYear + " - " + school + " - Classe " + classroom + section);

  // Create a copy of the template form in the created folder and name it "questionario"
  var formFile = formTemplate.makeCopy('questionario', newFolder);
  var form = FormApp.openById(formFile.getId());

  // Create a spreadsheet for answers in the new folder and name it "risposte"
  var repliesFile = responseTemplate.makeCopy('risposte', newFolder);
  var replies = SpreadsheetApp.openById(repliesFile.getId());

  // Connect the form to the spreadsheet
  form.setDestination(FormApp.DestinationType.SPREADSHEET, replies.getId());

Оба файла, форма и таблица, правильно скопированы в новую папку. Проблема в том, что другая копия формы создается в исходном каталоге (каталог шаблонов). Этого не происходит с электронной таблицей: сценарий создает копию в каталоге, который я хочу, и в папке шаблона не создаются копии. Я не могу понять это, любая идея? Некоторые изображения прилагаются.

Папка с шаблонами template folder

Папка назначения destination folder

1 Ответ

0 голосов
/ 01 марта 2020

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

Возможно, было бы лучше просто переименовать и переместить копию формы, которая автоматически сгенерировано:

// Create the destination folder
var newFolder = parentFolder.createFolder(institute + " - a.s. " + schoolYear + " - " + school + " - Classe " + classroom + section);

// Create a spreadsheet for answers in the new folder and name it "risposte"
var repliesFile = responseTemplate.makeCopy('risposte', newFolder);
var replies = SpreadsheetApp.openById(repliesFile.getId());

// Get the URL of the linked form
var formUrl = replies.getSheetByName('NameOfTheRepliesSheet').getFormUrl();
var formId = FormApp.openById(formUrl).getId();

// Get the Form as a Drive File object so we can change its parent folder.
var formFile = DriveApp.getFileById(formId);

// Rename the file.
formFile.setName('questionario');

// You can't 'move' a file in Drive: you add it to one folder and remove it from the other.
var oldFolder = formFile.getParents().next();
newFolder.addFile(formFile);
oldFolder.removeFile(formFile);

Обратите внимание, что теперь нет необходимости вызывать form.setDestination (), потому что форма уже была связана, когда была сделана копия таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...