DocumentApp找不到刚刚创建的文件

时间:2015-04-23 12:40:02

标签: google-apps-script google-sheets google-docs

当我使用DriveApp复制现有文件时,DocumentApp无法找到它。

我的主要目标是为通过复制模板创建的文件添加一些权限。不幸的是,通过使用DriveApp,会向用户发送电子邮件。使用Document API时,不会发生这种情况。

function copyTemplate() {
  var templateId = "xxxxxxx";
  var copy = DriveApp.getFileById(templateId).makeCopy("copy");
  var document = DocumentApp.openById(copy.getId());
  document.addEditor("xy@mail.com");
}

2 个答案:

答案 0 :(得分:1)

电子表格和文档都有openById()个方法,但它们是特定于文件类型的。如果您使用DocumentApp.openById(),则必须为其提供 google doc 的ID,而不是电子表格。

这是一个可以为您处理这两种类型的实用程序。

/**
 * Create a new document or spreadsheet by copying a template, and give editing privileges
 * to the given editor.
 *
 * @param {string} templateId    ID of a spreadsheet or google doc, to be used as a template.
 * @param {string} filename      New file name.
 * @param {string} editor        (optional) Email address of user to be given editor privileges.
 */
function copyAndShareTemplate(templateId,filename,editor) {
  // If no editor provided, assume script owner
  var editor = editor || Session.getActiveUser().getEmail();

  // Make a copy of given template, as filename
  var copy = DriveApp.getFileById(templateId).makeCopy(filename);

  // Type-specific handling for spreadsheets & documents
  var filetype = copy.getMimeType();
  switch (filetype) {
    case MimeType.GOOGLE_DOCS:
      var document = DocumentApp.openById(copy.getId());
      break;
    case MimeType.GOOGLE_SHEETS:
      document = SpreadsheetApp.openById(copy.getId());
      break;
    default:
      throw new Error( "Unsupported document type." );
  }
  // Add editing permissions to doc or spreadsheet.
  // Note: the addEditor method exists for both.
  document.addEditor(editor);
}

答案 1 :(得分:-1)

通过DriveApp,它永远不会发送,您必须使用MailApp手动发送电子邮件,或启用云端硬盘高级服务,并在应用脚本中使用Permission.Insert