当我使用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");
}
答案 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。