使用Google Apps Script的searchFiles查询读者权限文件遇参数错误
问题分析与解决方案
问题原因
这是Google Apps Script中DriveApp服务的已知行为:当searchFiles()的查询结果中没有任何当前执行上下文有权访问的文件时,服务不会返回hasNext()为false的空迭代器,而是直接抛出Exception: Invalid argument异常。你的查询语法本身符合Drive API搜索规则,不存在使用错误。
解决方案
通过异常捕获机制处理该场景,当捕获到特定异常时,即可判定为没有符合条件的文件。修改后的代码示例如下:
const folderId = "<id of folder>"; const targetEmail = "目标用户邮箱"; try { const folder = DriveApp.getFolderById(folderId); const files = folder.searchFiles(Utilities.formatString("'%s' in readers", targetEmail)); while(files.hasNext()) { const file = files.next(); // 在这里添加文件处理逻辑 console.log(`找到文件:${file.getName()}`); } } catch (e) { if (e.message === "Invalid argument") { // 无指定用户有权查看的文件,执行对应逻辑 console.log("该文件夹下没有指定用户拥有查看权限的文件"); } else { // 其他类型异常,重新抛出以暴露问题 throw e; } }
补充说明
如果需要仅查询文件(排除子文件夹),可以修改查询语句添加类型过滤:
const query = Utilities.formatString("'%s' in readers and mimeType != 'application/vnd.google-apps.folder'", targetEmail); const files = folder.searchFiles(query);
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

