问题读取共享文件夹使用DriveApp时,其他用户运行的应用程序脚本



我有一个谷歌表,使用应用程序脚本从保存在共享文件夹中的外部电子表格读取数据。该文件夹中有多个文件(都命名相同)。我有一个特殊的函数,它读取给定文件夹中的所有文件,并返回最近一个文件的id(然后我使用它从脚本中的其他文件加载数据)。

该脚本是使用我的公司帐户创建的,当我自己执行它时效果很好。但是,当其他用户尝试运行相同的脚本时,他们会收到以下错误消息:

TypeError: Cannot read property '1' of undefined
at get_latest_file_id(Code:380:21)
at get_timesheet_data(Code:19:12)
at unitTest(Code:78:3)

该错误显然与result[0][1]有关。是未定义的,但我不确定为什么。我怀疑这与权限和我对DriveApp的使用有关。我测试了以下内容:

  • 我已经尝试使用我的个人Gmail帐户来运行脚本并读取存储在我的公司帐户上的文件夹中共享的文件,这工作得很好。
  • 我已经尝试将共享文件移动到我的个人帐户,并从我的公司帐户运行脚本,这也工作得很好。

但是,如果我使用我的一个同事的帐户,无论文件是存储在我的公司帐户(这是同一组织的一部分)还是我的个人帐户上,它都不起作用。当用户运行脚本时,我得到了通常的"此开发人员未经过验证"。并且您必须选择在脚本第一次运行时给予访问权限,但除此之外,我没有得到任何错误消息,似乎指向权限,所以我不确定如何调试/继续。

如果您能给我任何指导和建议,我将不胜感激。

//RETREIVES THE FILE ID OF THE MOST RECENTLY CREATED FILE WITH A SPECIFIC NAME FROM A SPECIFIC FOLDER.
function get_latest_file_id(foldername,filename) {

var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXX');  
var files = DriveApp.getFilesByName(filename);
var result = [];
while (files.hasNext()) {
var file = files.next();
result.push([file.getDateCreated(),file.getId()]);
} 


result.sort(function(a,b){
// Turn your strings into dates, and then subtract them
// to get a value that is either negative, positive, or zero.
return new Date(b.date) - new Date(a.date);
});


var id = result[0][1];


// Logger.log('Most recent ID:', id);

return id;// return most recent file IDs
}//ENDS

Try This

function get_latest_file_id(foldername,filename) {

var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXX');  
var files = DriveApp.getFilesByName(filename);
var result = [];
while (files.hasNext()) {
var file = files.next();
result.push([file.getDateCreated(),file.getId()]);
} 
result.sort(function(x,y){
var xp = x[0];
var yp = y[0];
return xp == yp ? 0 : xp > yp ? 1 : -1;
var id = result[0][1];
});
}

添加此答案以提高可见度,特别是对于将来可能发现此问题的人。

错误TypeError: Cannot read property '1' of undefined表示result[0]undefined。因为我们只使用push填充结果,这意味着数组是空的。

这样做的原因是用户看不到文件夹中的任何文件。确保用户可以访问文件夹和文件将解决这个问题。在本例中,OP邀请用户到文件夹,这就解决了这个问题。

相关内容

最新更新