App Script修改需求:Drive电影文件夹信息增量写入指定电子表格
改进版Google Drive电影目录脚本
背景
你有一个名为movies的父级文件夹,其下存放多个子文件夹,每个子文件夹内存放对应电影文件,路径示例为:movies / luca (2020) /luca-1080.mkv。
原有脚本可实现两个基础功能:
- 提取子文件夹名称(示例为
luca (2020)) - 生成对应电影文件的Google Drive访问链接
但原有脚本存在问题:每次运行都会自动创建一个新的电子表格,无法复用已有表格也不能增量更新。
预期实现效果
- 可通过ID指定已有电子表格写入数据,无需每次新建
- 新增电影子文件夹后再次运行脚本,仅追加未录入的新条目,不重复写入已有内容
修改后的完整脚本
使用前请替换脚本开头的三个自定义参数:
MOVIES_FOLDER_ID:替换为你的movies父文件夹IDTARGET_SPREADSHEET_ID:替换为你要写入的已有电子表格IDSHEET_NAME:替换为电子表格中要写入的工作表名称,默认Sheet1
function listFolderContents() { // 自定义参数,请根据实际情况修改 const MOVIES_FOLDER_ID = "10Zw76wu2UNz3jufimUFGd8OJErPGnsih"; const TARGET_SPREADSHEET_ID = "替换为你的目标电子表格ID"; const SHEET_NAME = "Sheet1"; // 打开目标电子表格 const ss = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID); const sheet = ss.getSheetByName(SHEET_NAME); // 读取已有数据用于去重判断 const existingData = sheet.getDataRange().getValues(); const existingLinks = new Set(); // 表格为空则先写入表头 if (existingData.length === 0) { sheet.appendRow(['name', 'link']); } else { // 跳过表头,将已存在的文件链接存入集合 for (let i = 1; i < existingData.length; i++) { const link = existingData[i][1]; if (link) existingLinks.add(link); } } // 遍历电影文件夹下的所有子文件夹 const parentFolder = DriveApp.getFolderById(MOVIES_FOLDER_ID); const subFolders = parentFolder.getFolders(); const newEntries = []; while (subFolders.hasNext()) { const currentFolder = subFolders.next(); const folderName = currentFolder.getName(); const movieFiles = currentFolder.getFiles(); while (movieFiles.hasNext()) { const currentFile = movieFiles.next(); const fileUrl = currentFile.getUrl(); // 仅收集未录入的新条目 if (!existingLinks.has(fileUrl)) { newEntries.push([folderName, fileUrl]); } } } // 批量追加新条目,提升运行效率 if (newEntries.length > 0) { sheet.getRange(sheet.getLastRow() + 1, 1, newEntries.length, newEntries[0].length).setValues(newEntries); } }
功能说明
- 首次运行自动生成表头,后续运行自动跳过表头判断重复内容
- 以文件链接作为去重依据,同一个电影文件不会被重复写入表格
- 新增的电影子文件夹及内部文件会被自动识别追加到表格末尾
内容的提问来源于stack exchange,提问作者Abdias Rivera Bautista
相关产品推荐
相关产品推荐

