复制文件后获取文档的 URL/ID

Get document's URL/ID after a file was copied

我正在尝试让新复制的文档在复制完成后更新,添加到不同的文件夹并删除其根文件。 Google 脚本无法找到新复制的文件。错误在代码的下半部分,用星号包围,带有 TypeError。

我怀疑这与var doc = DocumentApp.getActiveDocument();的那行有关。我不确定如何获取新复制文档的 URL(file2Date - 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.

您的 file2 变量是 class File 的对象,因为这是 File#makeCopy return 的对象。要得到对应的Document,使用

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

备注

  1. 方法getActiveDocument指的是脚本附加到的Document(如果有的话)。它并不意味着 "the thing that the script is currently handling"。

  2. 如果您正在处理电子表格,那么 var ss = SpreadsheetApp.open(file2) 将 return file2 中包含的 Spreadsheet。显然,API 设计者忘记在 DocumentApp 中包含 open 方法,所以我们必须像上面那样检查文件 ID。