2015-04-23 103 views
0

当我使用DriveApp制作现有文件的副本时,DocumentApp无法找到它。DocumentApp找不到刚创建的文件

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

function copyTemplate() { 
    var templateId = "xxxxxxx"; 
    var copy = DriveApp.getFileById(templateId).makeCopy("copy"); 
    var document = DocumentApp.openById(copy.getId()); 
    document.addEditor("[email protected]"); 
} 
+0

您的代码对我来说工作正常,我所做的只是放入有效的文档ID。你确定这个模板是一个DOCUMENT而不是一个SPREADSHEET吗?如果它是电子表格,则需要使用SpreadsheetApp。看[这个答案](http://stackoverflow.com/a/29279546/1677912)。 – Mogsdad

+0

就是这样。我认为DOCUMENT是文件的同义词。谢谢。当您发布答案时,我可以对其进行投票。 – user2725152

回答

-1

海槽DriveApp它永远不会发送,你必须与MailApp手动发送电子邮件,或启用驱动先进的服务,并使用Permission.Insert Apps脚本里面。

+0

问题是,DriveApp将始终发送一封电子邮件。所以我选择使用DocumentApp,以便不发送电子邮件。但是,源代码问题是,为什么DocumentApp无法找到该文件。 – user2725152

+0

这并不回答这个问题; OP不询问如何发送电子邮件和分享。 – Mogsdad

1

这两个电子表格和文档都有openById()方法,但它们是文件类型特定的。如果您使用DocumentApp.openById(),则必须提供Google文档的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); 
} 
相关问题