Переименование проекта appsscript при дублировании электронной таблицы - PullRequest
2 голосов
/ 26 февраля 2020

Я дублирую электронные таблицы на основе файла шаблона с приложенным проектом appsscript. Ниже вы можете увидеть код basi c. Это отлично работает для электронных таблиц, но имя проекта appsscript остается тем же, что и файл шаблона. Что является проблемой, так как я не могу больше различать их guish. В итоге у меня будут сотни дубликатов.

Есть ли способ задать имя проекта appsscript при дублировании?

Заранее спасибо!

function copyTemplatev2(filename, sheetID) {

  var ss = SpreadsheetApp.openById(sheetID);

   //Make a copy of the template file
  var copy = DriveApp.getFileById(sheetID).makeCopy()
  var documentId = copy.getId();

  // Set permissions
  copy.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT)

  //Rename the copied file
  DriveApp.getFileById(documentId).setName(filename);
}

1 Ответ

3 голосов
/ 26 февраля 2020
  • attached appsscript project из a template file with attached appsscript project - это связанный с контейнером сценарий Spreadsheet.
  • Вы хотите переименовать имя проекта GAS для привязанного к контейнеру сценария Spreadsheet, который был скопирован.
  • В качестве шаблона используется электронная таблица, а в электронную таблицу включен сценарий, связанный с контейнером.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

  • Скриптовый скрипт в Документах Google не может быть получен методами Files: list и Файлы: попасть в Drive API. Об этом уже сообщалось средство отслеживания проблем .
  • Метаданные сценария, привязанного к контейнеру, в Документах Google могут быть обновлены методом Files: update в Drive API.
  • В вашем случае идентификатор проекта GAS (идентификатор сценария) не изменяется, поскольку он включен в шаблон Spreadsheet. Я думаю, что это может быть использовано для решения вашей проблемы.

Исходя из вышеизложенной ситуации, я хотел бы предложить следующий поток.

Поток:

  1. Установите переменные идентификатора скрипта, привязанного к контейнеру, таблицы Spreadsheet и исходного имени проекта идентификатора скрипта, привязанного к контейнеру, таблицы Spreadsheet.
  2. Переименование проекта GAS шаблона Spreadsheet в новый проект. имя.
  3. Скопируйте шаблон таблицы. В это время проект GAS также копируется как имя нового проекта.
  4. Переименование проекта GAS шаблона Spreadsheet в исходное имя проекта.

В соответствии с приведенным выше потоком, имя GAS-проекта сценария с привязкой к контейнеру в скопированной электронной таблице можно переименовать.

Если вышеуказанный обходной путь отражен в вашем сценарии, он выглядит следующим образом.

Измененный сценарий:

Перед запуском сценария , пожалуйста, включите Drive API в Advanced Google services. И, пожалуйста, установите переменные GASProjectId, originalGASProjectName и newGASProjectName.

function copyTemplatev2(filename, sheetID) {
  var GASProjectId = "###";  // Please set the container-bound script ID of the template Spreadsheet.
  var originalGASProjectName = "originalName";  // Please set the original project name of container-bound script ID of the template Spreadsheet.
  var newGASProjectName = "newName"; // Please set the new GAS project name.


  // Rename to new project name.
  Drive.Files.update({title: newGASProjectName}, GASProjectId);

  var ss = SpreadsheetApp.openById(sheetID);

  //Make a copy of the template file
  var copy = DriveApp.getFileById(sheetID).makeCopy()
  var documentId = copy.getId();

  // Set permissions
  copy.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT)

  //Rename the copied file
  DriveApp.getFileById(documentId).setName(filename);

  // Rename to original project name.
  Drive.Files.update({title: originalGASProjectName}, GASProjectId);
}

Ссылки:

Если я неправильно понял ваш вопрос и это было не то направление, которое вы хотите, я прошу прощения.

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