Получить URL/ идентификатор документа после копирования файла

Я пытаюсь обновить скопированный документ по завершении копирования, добавить его в другую папку и удалить его корневой файл. Скрипт Google не может найти недавно скопированный файл. Ошибка находится в нижней половине кода, окруженного звездочками с TypeError.

Я подозреваю, что это связано с линией var doc = DocumentApp.getActiveDocument();, Я не уверен, как получить URL-адрес недавно скопированного документа (file2 или же Date - Weekly Agenda).

  function copyupdateWeeklyAgenda() {
  var file = DriveApp.getFileById("FILEKEY");
  var source_folder = DriveApp.getFolderById("FOLDERKEY");
  var dest_folder = DriveApp.getFolderById("FOLDERKEY");
  // Make a backup copy.
  var file2 = file.makeCopy('Date - Weekly Agenda');
  dest_folder.addFile(file2);
  source_folder.removeFile(file2);

//START Update Weekly Agenda Data ---
  var ssUrl = 'https://whydoyouwanttoknow.com';
  var sheetName = 'Sheet1';   // name of sheet to use
  var rangeName = 'A1:B2';    // range of values to include 
  var values = SpreadsheetApp.openByUrl(ssUrl)
                             .getSheetByName(sheetName)
                             .getRange(rangeName)
                             .getValues();
  var doc = DocumentApp.getActiveDocument();
  **var body = doc.getBody();** <--- TYPEERROR: Cannot call method "getBody" of null.
  var ranges = doc.getNamedRanges('embeddedSheet-range');
  if (ranges.length == 0) {
    var table = body.appendTable(values);
  ...ETC.

1 ответ

Решение

Ваш file2 переменная является объектом класса File потому что это то, что File#makeCopy возвращается. Чтобы получить соответствующий Document использовать

var doc = DocumentApp.openById(file2.getId());

замечания

  1. Метод getActiveDocument относится к документу, к которому прикреплен скрипт (если есть). Это не означает "вещь, которую скрипт обрабатывает в настоящее время".

  2. Если вы имели дело с таблицей, то var ss = SpreadsheetApp.open(file2) вернет Spreadsheet содержалась в file2, По-видимому, разработчики API забыли включить open метод в DocumentApp, поэтому мы должны пройти через идентификатор файла, как указано выше.

Другие вопросы по тегам