将所有权转移到编辑器时,File.setOwner()返回“不允许操作”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将所有权转移到编辑器时,File.setOwner()返回“不允许操作”相关的知识,希望对你有一定的参考价值。
我有一个谷歌脚本,用于根据谷歌电子表格中存储的数据生成文档。生成文档后,我试图将所有者更改为其他gmail帐户,但我不断收到以下错误:
[15-09-23 09:55:09:480 PDT] File.setOwner([bob@gmail.com])[1.03秒]
[15-09-23 09:55:09:566 PDT]执行失败:不允许动作(第82行,文件“助手”)[总运行时间为5.401秒]
我想了解为什么我无法使用Google App Script更改所有者,但我可以手动通过Google云端硬盘。
细节:
Bob(Bob@gmail.com)已经在他的驱动器上与Alice共享了一个目录(Alice@gmail.com)。共享目录中是一个电子表格,用于从电子表格的内容生成发票。 Alice使用电子表格(她具有编辑权限)并在电子表格上调用“生成>发票”菜单操作来创建发票。由于她调用了该函数,因此该文件是以Alice作为所有者创建的,但Bob希望成为所有发票的所有者。 Bob已经尝试在创建文档后立即使用Google App Script设置文档的所有者,但它返回上面记录的错误。
电子表格内容:
| A | B |
1| First Name | Last Name |
2| John | Doe |
Google App脚本:
/**
* Adds a menu-item to allow the generation of documents
*
* @param {Object} e The event parameter for a simple onOpen trigger.
*/
function onOpen(e) {
var menuitems = [];
menuitems.push({
name: "Invoice",
functionName: "createInvoice"
});
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("Generate", menuitems);
}
/**
* This function reads data from cells A2:A3 to dynamically generate a document
*
*/
function createInvoice() {
var this_folder = cwd();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var content = sheet.getRange("A2:A3").getValues()[0].join(" ");
// Create a file with the given content
var file = DriveApp.createFile("Invoice", content);
// Add the file to the shared folder
this_folder.addFile(file);
// Remove the file from the user's root directory
DriveApp.getRootFolder().removeFile(file);
// Log the current owner of the document
Logger.log(file.getOwner().getName());
// Change the owner of the document from the active user to Bob.
file.setOwner("bob@gmail.com");
}
/**
* This is a helper function used to get the directory of the active spreadsheet.
*
*/
function cwd() {
var this_file = DriveApp.getFileById(SpreadsheetApp.getActive().getId());
return this_file.getParents().next();
}
重现步骤:
- 从Gmail帐户,与另一个Gmail帐户共享文件夹。
- 使用主gmail帐户在共享文件夹中创建电子表格:
- 将Google App脚本添加到电子表格(将setOwner行更改为相应的电子邮件地址后)。
- 授予对其他Gmail帐户的写入权限。
- 从其他Gmail帐户登录并加载文档。
- 调用脚本(Generate> Invoice)。第一次执行此操作时,它将要求权限。
- 该脚本应该出错,并出现以下错误:
不允许采取行动。
- 如果在调用脚本后打开脚本并查看日志,则会显示另一个gmail帐户拥有该文档,并且应该能够更改它。
附加信息:
- 如果我删除“file.setOwner()”方法,则会创建该文件,我可以手动设置通过Web界面更改所有者。
- 使用脚本和设置,我动态创建了文件夹,并能够使用Google App Script更改所有者。此问题只会影响Files上的setOwner()方法。
当文件放在Google云端硬盘的Team Drive文件夹中时,可能会发生此错误。
以上是关于将所有权转移到编辑器时,File.setOwner()返回“不允许操作”的主要内容,如果未能解决你的问题,请参考以下文章
为啥当应用转移到新的应用商店帐户时,所有用户都没有显示更新?