如何用Google Apps Script导出特定日期的Google Sheets历史版本
修改后的Google Apps Script:获取指定日期的Sheet历史版本并生成新文件
针对你的需求,我对原脚本做了两处核心修改:
- 自动查找2022年12月31日的历史版本,无需手动填写revision ID
- 生成全新的Google Sheet文件,完全不覆盖原文件
修改后的完整脚本
function getHistoricalVersionAsNewFile() { // 配置参数 const targetDate = new Date("2022-12-31"); // 指定要获取的日期 const originalFileId = "###"; // 替换为你的Google Sheet文件ID const timeZone = "Asia/Shanghai"; // 根据你的时区调整,比如"America/New_York" // 获取原文件的所有版本记录 const revisions = Drive.Revisions.list(originalFileId, { maxResults: 1000 }); if (!revisions.items) { Logger.log("未找到该文件的版本记录"); return; } // 筛选出目标日期的最新版本(当天可能有多个版本,取最后一个) let targetRevision = null; const targetDateStr = Utilities.formatDate(targetDate, timeZone, "yyyy-MM-dd"); for (let i = revisions.items.length - 1; i >= 0; i--) { const revision = revisions.items[i]; const revisionDateStr = Utilities.formatDate( new Date(revision.modifiedDate), timeZone, "yyyy-MM-dd" ); if (revisionDateStr === targetDateStr) { targetRevision = revision; break; } } if (!targetRevision) { Logger.log("未找到2022年12月31日的版本记录"); return; } // 获取该版本的导出链接 const endpoints = Drive.Revisions.get(originalFileId, targetRevision.id).exportLinks; const keys = Object.keys(endpoints); let excelBlob = null; for (let i = 0; i < keys.length; i++) { // 匹配Excel格式的导出链接(用于转换为Google Sheet) if (keys[i].indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") > -1) { const endpoint = endpoints[keys[i]] + "&access_token=" + ScriptApp.getOAuthToken(); excelBlob = UrlFetchApp.fetch(endpoint).getBlob(); break; } } if (!excelBlob) { Logger.log("无法获取该版本的导出数据"); return; } // 获取原文件信息,用于命名新文件 const originalFile = Drive.Files.get(originalFileId); const newFileName = `${originalFile.title} - 2022-12-31版本`; // 创建新的Google Sheet文件(不覆盖原文件) const newFile = Drive.Files.insert( { title: newFileName, mimeType: "application/vnd.google-apps.spreadsheet" // 指定为Google Sheet格式 }, excelBlob ); Logger.log(`新文件已创建,ID:${newFile.id},名称:${newFileName}`); }
使用步骤
- 打开你的目标Google Sheet,点击顶部菜单栏的「工具」→「脚本编辑器」
- 删除编辑器里的默认代码,粘贴上面的完整脚本
- 替换脚本中的
originalFileId:复制原Sheet URL中d/和/edit之间的字符串 - (可选)调整
timeZone参数,确保日期匹配准确 - 点击编辑器顶部的运行按钮,第一次运行会要求授权,按提示完成权限验证
- 运行成功后,新的历史版本文件会出现在你的Google Drive根目录
关键修改说明
- 自动匹配日期:遍历文件所有版本,通过日期格式化筛选出2022-12-31的最新版本,无需手动查找revision ID
- 生成新文件:用
Drive.Files.insert替代原脚本的Drive.Files.update,直接创建新文件,完全不影响原文件 - 格式转换:先导出为Excel格式,再转换为Google Sheet,保证新文件的格式兼容性
内容的提问来源于stack exchange,提问作者EagleEye
相关产品推荐
相关产品推荐

