3

我正在尝试在完成复制后更新新复制的文档,将其添加到不同的文件夹并删除其根文件。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.
4

1 回答 1

3

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

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

评论

  1. 该方法getActiveDocument是指脚本附加到的文档(如果有)。这并不意味着“脚本当前正在处理的事情”。

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

于 2016-12-10T04:04:58.480 回答