批量将Google Sheets文件夹内文件导出为XLSX格式求助
批量导出Google Drive文件夹内所有Google Sheets为XLSX格式
以下是修改后的脚本,可实现批量导出指定文件夹内所有Google Sheets文件为XLSX格式,同时保留你原有脚本的核心导出逻辑:
function BatchExportSheetsToXLSX() { try { // 替换为你的源文件夹ID(存放所有Google Sheets的文件夹) const sourceFolderId = "你的源文件夹ID"; // 替换为你要保存XLSX文件的目标文件夹ID const targetFolderId = "你的目标文件夹ID"; const sourceFolder = DriveApp.getFolderById(sourceFolderId); const targetFolder = DriveApp.getFolderById(targetFolderId); // 筛选文件夹内所有Google Sheets类型的文件 const sheetFiles = sourceFolder.getFilesByType(MimeType.GOOGLE_SHEETS); while (sheetFiles.hasNext()) { const file = sheetFiles.next(); const fileId = file.getId(); const fileName = file.getName(); // 构造导出XLSX的请求URL const exportUrl = `https://docs.google.com/feeds/download/spreadsheets/Export?key=${fileId}&exportFormat=xlsx`; const params = { method: 'get', headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }, muteHttpExceptions: true, }; // 获取导出的文件Blob const blob = UrlFetchApp.fetch(exportUrl, params).getBlob(); // 设置XLSX文件名,避免重复可添加时间戳 let xlsxFileName = `${fileName}.xlsx`; // 检查目标文件夹是否已有同名文件,若有则添加时间戳后缀 if (targetFolder.getFilesByName(xlsxFileName).hasNext()) { const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); xlsxFileName = `${fileName}_${timestamp}.xlsx`; } blob.setName(xlsxFileName); // 将Blob保存到目标文件夹 targetFolder.createFile(blob); Logger.log(`已导出:${fileName}`); } Logger.log("批量导出完成"); } catch (f) { Logger.log(`导出出错:${f.toString()}`); } }
关键改动说明
- 文件夹遍历与筛选:通过
getFilesByType(MimeType.GOOGLE_SHEETS)精准筛选目标文件夹内的Google Sheets文件,避免处理其他类型文件 - 批量循环处理:使用
while循环遍历所有符合条件的表格文件,对每个文件执行导出逻辑 - 重复文件名处理:增加同名文件检测,若目标文件夹已存在相同名称的XLSX文件,自动添加时间戳后缀避免覆盖
- 参数可配置化:将源文件夹和目标文件夹ID设为常量,方便你直接替换修改
使用注意事项
- 替换脚本中的
你的源文件夹ID和你的目标文件夹ID,可通过Google Drive文件夹的URL获取ID(URL中folders/后的字符串) - 首次运行脚本时会触发权限申请,需授权脚本访问你的Google Drive文件
- 若文件夹内文件数量较多,脚本运行时间可能较长,可通过Google Apps脚本的「执行记录」查看进度
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

