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

时间:2016-12-10 01:32:02

标签: google-apps-script google-sheets google-drive-api geturl

我正在尝试将新复制的文档在复制完成后更新,添加到其他文件夹并删除其根文件。 Google脚本无法找到新复制的文件。该错误位于由TypeError星号包围的代码的下半部分。

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

1 个答案:

答案 0 :(得分:2)

您的file2变量是类File的对象,因为这是File#makeCopy返回的内容。要获取相应的Document,请使用

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

说明

  1. 方法getActiveDocument是指附加脚本的文档(如果有)。它并不意味着脚本正在处理的东西&#34;。

  2. 如果您正在处理电子表格,则var ss = SpreadsheetApp.open(file2)会返回Spreadsheet中包含的file2。显然,API设计人员忘记在open中包含DocumentApp方法,因此我们必须按上述方式查看文件ID。