我有一个加载项,允许用户将我的模板从驱动器下载到他们的驱动器中,前提是该加载项已安装在其工作表或文档中。
应复制的功能如下
function createFileCopy(id){
var file = id.split('.');
var docName = DriveApp.getFilesByName(file[0]);
while (docName.hasNext()) {
var file = docName.next();
var fileId = file.getId();
var fileName = file.getName();
}
Logger.log(fileId);
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(TEMPLATES_DATA);
var data = sheet.getRange(1, 9, sheet.getLastRow()-1, 1).getValues();
var pos = data.map(function (obj) { return obj[0]; }).indexOf(id);
if(pos > -1){
// var val = sheet.getRange("J" + (pos + 1)).getValue() + 1;
var title = sheet.getRange("A" + (pos + 1)).getValue();
// sheet.getRange("J" + (pos + 1)).setValue(val);
}
var newFile = DriveApp.getFileById(fileId).makeCopy('Copy of '+ title);
return {
title: newFile.getName(),
url: newFile.getUrl()
}
问题是,当用户尝试制作副本时,他/她遇到错误,“找不到具有给定ID的项目,或者您没有访问权限。”
我评论了两行,我认为问题是由于将下载增量回传到原始电子表格,但事实证明,这不是那里唯一的问题。
在原始帐户BTW中可以正常工作。
我已经向插件顾问寻求帮助,但在这里却被改了地址。
请帮助
答案 0 :(得分:1)
当用户安装加载项时,它将在该用户的帐户下执行。因此,除非获得许可,否则他们将无法访问您的模板电子表格。
如果您愿意与最终用户共享文件,则可以使用Advanced Service以编程方式授予/撤消对模板的许可。这些高级服务仅是其相应API的包装,因此,在这种情况下,您需要利用Drive API V2文档来了解如何添加/删除权限。以下指南和参考应有所帮助:
如果不希望共享文件,则可以选择使用服务帐户。服务帐户是一种特殊的帐户,您可以从GCP API控制台创建。您可以向服务帐户授予对模板的访问权限,然后使用服务帐户通过电子表格API以Spreadsheet resource object in JSON format的形式检索电子表格模板。然后,您可以使用此资源对象创建电子表格的用户拥有的副本,而无需显式共享模板。 You can find more info on service accounts by checking other threads here on stackoverflow。