我查看了我的Gmail帐户。如果有带图片附件的新邮件,我会在我的Google云端硬盘帐户中创建一个子文件夹,文件夹名称为电子邮件主题,并为每个附件创建一个文件。
尝试使用%admin%
在根目录中创建子文件夹时,每件事都很有效,但在使用DriveApp.createFolder()
对象的.createFolder()
方法时出错了。
这是证明我们可以使用Folder对象创建文件夹的link to App script documentation。
这是代码:
Folder
我收到了这个错误
拒绝访问:DriveApp。 (里加57,档案“生产”)
在这一行
var folders = DriveApp.getFoldersByName("Received photos");
if (!(folders.hasNext())) {
Logger.log ("Recevied photos folder not found!");
} else {
var main_folder = folders.next();
Logger.log ("Going into " + main_folder.getName());
var main_folder_id = main_folder.getId();
// Move every attachment to right folder
var folders = main_folder.getFoldersByName(title);
if (folders.hasNext()) {
Logger.log ("Folder exists" + title);
folder = folders.next();
} else {
Logger.log ("Folder " + title + " not exists, I create it");
/**********************************************************
* THE FOLLOWING ROW GIVE ME ACCESS DENIED ERROR
***********************************************************/
folder = main_folder.createFolder(title);
}
try {
attachments.forEach(function (attachment, idx_att) {
var moved_file = folder.createFile(attachment);
});
} catch (e) {
Logger.log(e.toString());
}
}
我检查了我的日志,因此我确定folder = main_folder.createFolder(title);
是现有文件夹。
这是我的文件夹,不是某人给我的。那么,为什么App脚本无法创建子文件夹呢?
编辑:
我尝试调试我的权限添加这些行
main_folder
用户的电子邮件是正确的,它是所有者。但第二个日志行告诉我Logger.log(Session.getActiveUser().getEmail());
var access = main_folder.getAccess(Session.getActiveUser());
Logger.log(access);
。现在的问题是为什么我不能使用这个App Script独立脚本对我的文件夹进行写访问?
编辑2:
我尝试验证所有权
VIEW
太可惜了!所有者的电子邮件不是我的电子邮件,但是用户的电子邮件与我一起分享这个脚本...但我在Drive上验证了主文件夹的REAL所有者是我...
那么我做错了什么以及如何使用共享脚本写入私人文件夹?
答案 0 :(得分:1)
原因是我的脚本由用户拥有,并且与我共享编辑权限。
所以getFoldersByName()
不仅会给我一个文件夹,还会给我一个群组,因为其他用户只是一个具有此名称的文件夹。
所以我循环找到一个拥有权利人
的人 // Because the folder 'Received photos' is present in
// a lot of occurencies. The one I need is that with owner = current user
while (folders.hasNext()) {
main_folder = folders.next();
if (main_folder.getOwner().getEmail() == Session.getActiveUser().getEmail()) {
break;
};
}
Logger.log ("Dive into " + main_folder.getName());
var main_folder_id = main_folder.getId();
...现在脚本可以写入文件夹
当然,对我来说,这是getFoldersByName
检索脚本所有者文件夹而不是当前用户的错误。