请求编写Google Apps Script实现每月自动归档Sheet1列数据至Sheet2
完整实现代码
function storeData() { // 替换为你的表格ID const SPREADSHEET_ID = '你的表格ID'; const SOURCE_SHEET_NAME = 'Sheet 1'; const ARCHIVE_SHEET_NAME = 'Sheet 2'; const SOURCE_RANGE = 'A1:A150'; // 要复制的源数据范围 try { // 打开表格并获取工作表 const ss = SpreadsheetApp.openById(SPREADSHEET_ID); const sourceSheet = ss.getSheetByName(SOURCE_SHEET_NAME); const archiveSheet = ss.getSheetByName(ARCHIVE_SHEET_NAME); if (!sourceSheet || !archiveSheet) { throw new Error('未找到指定的工作表,请检查名称是否正确'); } // 获取源数据 const sourceData = sourceSheet.getRange(SOURCE_RANGE).getValues(); // 确定目标列:根据当前月份(1月对应第1列,2月第2列...12月第12列) const currentMonth = new Date().getMonth() + 1; // getMonth()返回0-11,加1得到1-12 const targetColumn = currentMonth; // 写入数据到目标列 const targetRange = archiveSheet.getRange(1, targetColumn, sourceData.length, 1); targetRange.setValues(sourceData); // 可选:在目标列第一行添加月份标识,方便识别历史数据 const monthNames = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']; archiveSheet.getRange(1, targetColumn).setValue(monthNames[currentMonth - 1]); SpreadsheetApp.getUi().alert('数据归档成功!'); } catch (error) { SpreadsheetApp.getUi().alert('数据归档失败:' + error.message); console.error(error); } }
代码说明
- 表格ID替换:将
SPREADSHEET_ID的值替换为你的Google表格ID(可从表格URL中提取) - 源数据范围:
SOURCE_RANGE指定了Sheet1中要复制的A1-A150区域,需调整范围可直接修改此值 - 目标列逻辑:通过
currentMonth获取当前月份,对应Sheet2的列(1月→A列,2月→B列…12月→L列),确保每月数据存入对应列 - 错误处理:添加工作表存在性检查和异常捕获,避免因名称错误或其他问题导致脚本崩溃
- 可选标识:自动在目标列第一行添加月份名称,方便快速识别各月历史数据
设置每月自动执行
- 打开Google表格,点击菜单栏「扩展程序」→「Apps脚本」
- 在脚本编辑器中,点击左侧的「触发器」图标(时钟形状)
- 点击「添加触发器」,设置以下参数:
- 选择要运行的函数:
storeData - 选择部署类型:「Head」
- 选择事件源:「时间驱动」
- 选择时间类型:「基于月计时器」
- 设置日期和时间:选择每月固定日期(比如每月1号)和时间,确保在Sheet1更新数据后执行
- 选择要运行的函数:
- 点击「保存」,按提示完成脚本权限授权
内容的提问来源于stack exchange,提问作者Tillthen BigHeart
相关产品推荐
相关产品推荐

