Apps Script获取共享云端硬盘文件失败的解决方法
问题根因
你无法获取企业共享文件夹内文件信息的核心原因是:Drive API v2 的 Files.list 接口默认仅检索个人「我的云端硬盘」范围内的资源,不会返回共享云端硬盘(含企业内部直接共享给你的文件夹)下的内容。你查到的supportsAllDrives: true是解决该问题的必要配置,但单独添加该参数无法生效,必须同时搭配includeItemsFromAllDrives: true参数,才能让接口正常返回共享盘内的匹配结果。
具体修正方案
你已经提前启用了Drive API服务,不需要额外做服务开通操作,只要你的账号本身对目标企业共享文件夹有查看权限,直接在Drive.Files.list的请求参数中补充共享盘相关配置即可正常拉取数据。
修正后的可运行代码片段如下:
var expFolder = carpetabasecs.searchFolders(searchFor); // 提前清空目标区域旧数据,避免残留历史写入内容 sh.getRange(2, 1, Math.max(sh.getLastRow() - 1, 1), 2).clearContent(); while (expFolder.hasNext()) { var expFolderDef = expFolder.next(); var expFolderId = expFolderDef.getId(); var mask = 'TXT'; var query = `title contains "${mask}" and trashed = false and "${expFolderId}" in parents`; // 补充共享盘访问必填参数 var findings = Drive.Files.list({ q: query, supportsAllDrives: true, includeItemsFromAllDrives: true }) || { items: [] }; // 兼容无匹配结果的空场景,避免调用map时抛出异常 var table = [['Archivos exportados', 'IDs'], ...findings.items.map(f => [f.title, f.id]).sort()]; sh.getRange(2, 1, table.length, 2).setValues(table); }
额外注意点
- 如果你需要汇总所有匹配文件夹下的TXT文件到同一张表,而不是用后一个文件夹的结果覆盖前序内容,可以把
table数组的定义移到while循环外侧,循环内只追加匹配到的文件条目,所有文件夹遍历完成后再统一执行一次写入操作即可。 - 如果你的
searchFolders方法是基于原生DriveApp.searchFolders实现的,需要在搜索条件中补充共享盘相关的检索范围配置,否则连共享盘内的目标文件夹本身都无法匹配到,后续文件检索自然不会返回结果。 - 如果目标文件夹存放在共享云端硬盘的深层路径下、没有直接共享给你的账号,可以在
Drive.Files.list的参数中额外添加corpora: 'allDrives'扩大检索范围,普通直接共享到你账号下的企业文件夹不需要配置该参数。
内容的提问来源于stack exchange,提问作者user19389364
相关产品推荐
相关产品推荐

