Google Apps Script文件按名排序、后缀过滤 固定输出到Sheets
优化实现方案
核心修改点
针对原有脚本的两个需求,调整逻辑如下:
- 新增后缀过滤:遍历文件时校验文件后缀,仅保留配置列表内的后缀文件,自动兼容后缀大小写差异
- 固定输出顺序:先收集所有符合要求的文件信息,再按文件名字母序统一排序后再组装写入数据,避免Google Drive原生返回文件顺序不稳定的问题
修改后完整代码
// 按需配置要保留的文件后缀,无需带前缀点,统一写小写即可 const ALLOWED_EXT = ['pdf', 'docx', 'xlsx', 'png']; const list = [['ID']]; const matchedFiles = []; const files = expofd.getFiles(); // 遍历文件,过滤符合后缀要求的条目 while (files.hasNext()) { const file = files.next(); const fileName = file.getName(); // 提取文件后缀,兼容多段点文件名、无后缀文件场景 const ext = fileName.includes('.') ? fileName.split('.').pop().toLowerCase() : ''; if (!ALLOWED_EXT.includes(ext)) continue; // 暂存文件名和ID,用于后续排序 matchedFiles.push({ name: fileName, id: file.getId() }); } // 按文件名字母升序排序,结果固定 matchedFiles.sort((prev, next) => prev.name.localeCompare(next.name)); // 组装写入表格的二维数组 matchedFiles.forEach(fileItem => list.push([fileItem.id])); // 保持原有写入位置不变:从B2单元格开始写入数据 sh.getRange(2, 2, list.length, list[0].length).setValues(list);
使用说明
- 如果不需要后缀过滤、要获取文件夹下所有文件,直接删除后缀判断的
if (!ALLOWED_EXT.includes(ext)) continue;这行即可 - 排序逻辑使用
localeCompare实现,对英文、中文文件名都能输出符合常规阅读习惯的固定排序结果,不会出现每次运行顺序变动的问题 - 调整
ALLOWED_EXT数组内的后缀值,即可自定义需要抓取的文件类型
内容的提问来源于stack exchange,提问作者user19389364
相关产品推荐
相关产品推荐

