需求:实现每日自动增量复制粘贴单元格区域的Google Apps Script宏
自动化每日收入进度静态快照方案
修改后的宏代码
以下代码会自动根据当前日期计算对应行号(1月1日对应第1行,以此类推),将目标行的公式内容转换为静态值,完成快照存储:
/** @OnlyCurrentDoc */ function copyIncomeSnapshot() { const spreadsheet = SpreadsheetApp.getActive(); const today = new Date(); // 计算当天是当年的第几天(1月1日返回1) const dayOfYear = getDayOfYear(today); // 构造动态范围:E列到BR列,对应当年第N天的行 const targetRange = spreadsheet.getRange(`E${dayOfYear}:BR${dayOfYear}`); // 将该范围的内容复制为值覆盖原位置(把公式转成静态数据) targetRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); } // 辅助函数:计算日期是当年的第几天 function getDayOfYear(date) { const startOfYear = new Date(date.getFullYear(), 0, 1); const timeDiff = date - startOfYear; const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24)) + 1; return days; }
行号调整说明
如果你的表格中1月1日对应的不是第1行(比如原宏用的第47行),只需修改行号计算逻辑:
比如起始行是47,那么将const targetRange = ...这行改为:
const startRow = 47; // 你的1月1日对应的行号 const targetRange = spreadsheet.getRange(`E${startRow + dayOfYear - 1}:BR${startRow + dayOfYear - 1}`);
设置定时自动触发
- 打开目标Google表格,点击顶部菜单栏「扩展程序」→「Apps脚本」
- 在脚本编辑器左侧,点击「触发器」图标(时钟样式)
- 点击右下角「添加触发器」,按以下配置设置:
- 选择函数:
copyIncomeSnapshot - 部署类型:
Head - 事件源:
时间驱动 - 时间基于:
日计时器 - 选择一天中的执行时间(建议选数据更新完成后的时段,比如凌晨2点)
- 选择函数:
- 点击「保存」,按提示完成脚本权限授权即可
内容的提问来源于stack exchange,提问作者Daniel Carroll
相关产品推荐
相关产品推荐

