求助:用Google Apps Script实现Sheet1月度数据归档至Sheet2
实现Sheet1月度数据归档至Sheet2的Google Apps Script方案
步骤1:打开脚本编辑器
- 打开目标Google表格,点击顶部菜单栏的「扩展程序」→「Apps Script」,进入脚本编辑界面。
- 清空默认
Code.gs文件的内容,准备写入自定义脚本。
步骤2:编写归档脚本
将以下代码粘贴到Code.gs中,关键逻辑已标注注释:
function archiveMonthlyData() { // 获取当前表格实例 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 按名称获取Sheet1和Sheet2 const sheet1 = ss.getSheetByName('Sheet1'); const sheet2 = ss.getSheetByName('Sheet2'); // 获取Sheet1中已填充的全部有效数据 const dataRange = sheet1.getDataRange(); const data = dataRange.getValues(); // 若Sheet1无数据,直接终止脚本 if (data.length === 0) return; // 在Sheet2的末尾追加Sheet1的数据 sheet2.getRange( sheet2.getLastRow() + 1, // 从Sheet2最后一行的下一行开始 1, // 从第1列开始 data.length, // 要粘贴的行数 data[0].length // 要粘贴的列数 ).setValues(data); // 清空Sheet1数据(若Sheet1有表头,看下方修改说明保留表头) sheet1.clearContents(); // --- 保留表头的修改方式 --- // 如果Sheet1第1行是表头,只清空第2行及以下的数据,替换上面的clearContents()为: // sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()).clearContents(); }
步骤3:设置定时触发器(自动每月执行)
要实现当月结束自动归档,需配置时间驱动触发器:
- 在脚本编辑器左侧,点击时钟形状的「触发器」图标。
- 点击右下角「添加触发器」,按以下参数设置:
- 选择函数:
archiveMonthlyData - 部署类型:「基于时间的触发器」
- 时间驱动类型:「月份计时器」
- 月份中的某一天:选择每月最后一天(或你需要的归档日期)
- 时间窗口:选一个用户不会提交数据的时段(比如「晚上10点到11点」)
- 选择函数:
- 保存后按提示完成授权(首次运行需要授权脚本访问你的表格)。
步骤4:手动测试脚本
- 在脚本编辑器的代码界面,点击运行按钮(三角形图标),选择
archiveMonthlyData执行。 - 检查Sheet2是否成功追加数据,Sheet1是否按预期清空(若保留表头,确认表头未被删除)。
可选优化:给归档数据添加月份标记
如果需要在Sheet2中区分不同月份的数据,可以修改脚本,给每条数据加上归档月份:
在const data = dataRange.getValues();之后添加以下代码:
// 获取当前归档月份(格式为YYYY-MM) const currentMonth = Utilities.formatDate( new Date(), Session.getScriptTimeZone(), "YYYY-MM" ); // 给每一行数据头部添加月份标记 const dataWithMonth = data.map(row => [currentMonth, ...row]);
然后将setValues(data)改为setValues(dataWithMonth)即可。
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

