如何用Google Sheets与Apps Script提取共享云端硬盘数据至表格?
提取共享云端硬盘文件信息到Google Sheets(Apps Script实现)
这个需求完全可行,核心是在Apps Script中指定共享云端硬盘/目标文件夹的ID,而非默认访问个人云端硬盘。以下是具体实现步骤:
1. 获取共享云端硬盘/目标文件夹的ID
打开共享云端硬盘(或目标文件夹),查看浏览器地址栏:
- 共享硬盘的地址格式类似
https://drive.google.com/drive/u/0/drives/XXXXXX,其中XXXXXX是硬盘ID - 文件夹的地址格式类似
https://drive.google.com/drive/u/0/folders/XXXXXX,其中XXXXXX是文件夹ID
复制这个ID备用。
2. 编写Apps Script代码
打开目标Google Sheets,点击「扩展程序」→「Apps Script」,替换默认代码为以下内容:
function extractSharedDriveFiles() { // 替换为你的共享云端硬盘ID或目标文件夹ID const targetId = "替换为你的共享硬盘/文件夹ID"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 清空旧数据(保留表头) sheet.clearContents(); const headers = ["文件名", "创建日期", "修改日期", "文件链接", "文件类型"]; sheet.appendRow(headers); // 尝试获取目标位置:优先共享硬盘,其次文件夹 let target; try { target = DriveApp.getDriveById(targetId); // 遍历共享硬盘内的所有文件和文件夹 processFiles(target.getFiles(), sheet); processFolders(target.getFolders(), sheet); } catch (e) { try { target = DriveApp.getFolderById(targetId); processFolderRecursively(target, sheet); } catch (err) { SpreadsheetApp.getUi().alert("ID无效或无访问权限:" + err.message); return; } } } // 递归处理文件夹内的文件和子文件夹 function processFolderRecursively(folder, sheet) { processFiles(folder.getFiles(), sheet); const subFolders = folder.getFolders(); while (subFolders.hasNext()) { processFolderRecursively(subFolders.next(), sheet); } } // 批量处理文件并写入表格 function processFiles(files, sheet) { while (files.hasNext()) { const file = files.next(); const row = [ file.getName(), file.getDateCreated(), file.getLastUpdated(), `=HYPERLINK("${file.getUrl()}")`, // 生成可点击的文件链接 file.getMimeType() ]; sheet.appendRow(row); } } // 处理共享硬盘内的顶层文件夹 function processFolders(folders, sheet) { while (folders.hasNext()) { processFolderRecursively(folders.next(), sheet); } }
3. 权限与运行说明
- 首次运行脚本时,会触发权限授权流程,需要允许脚本访问你的Google Drive和Sheets。确保你对目标共享硬盘/文件夹有至少「查看者」权限,否则会提示权限不足。
- 如果遇到「权限不足」错误,检查共享硬盘的权限设置,确认你能在网页端正常访问该资源。
- 可根据需求修改表头,或添加更多文件属性(比如文件大小
file.getSize()、所有者file.getOwner().getEmail()等)。
内容的提问来源于stack exchange,提问作者CBrock2024
相关产品推荐
相关产品推荐

