如何用Google Apps Script每日定时复制表格指定行数据并追加?
实现每日定时追加指定区域数据到表格下方
完整代码实现
以下是修正并完善后的代码,可实现你的需求:
function CopyRow() { // 获取指定的Sheet1,避免切换工作表时出错 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // 获取C3:F3区域的一行数据(第3行,第3列,1行,4列) const sourceData = sheet.getRange(3, 3, 1, 4).getValues()[0]; // 获取当前日期(保留原生日期对象,表格会自动识别为日期格式) const today = new Date(); // 若需要固定格式的日期字符串,可替换为下面一行: // const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm:ss"); // 合并日期与源数据,组成新的一行 const combinedData = [today, ...sourceData]; // 找到C列中最后一个有数据的行,下一行即为目标写入行(确保从C7开始) const lastRowInC = sheet.getRange("C:C").getValues().filter(String).length; const targetRow = lastRowInC === 0 ? 7 : lastRowInC + 1; // 将合并后的数据写入目标行(B列存日期,C:F列对应原数据) sheet.getRange(targetRow, 2, 1, combinedData.length).setValues([combinedData]); }
代码说明
- 指定工作表:用
getSheetByName("Sheet1")替代getActiveSheet(),确保始终操作目标表格,避免切换工作表导致错误。 - 修正数据范围:原代码中
getRange(2,3,1,3)对应B3:D3,改为getRange(3,3,1,4)才是C3:F3区域(行从1开始计数,列C是第3列,F是第6列,共4列跨度)。 - 日期处理:默认保留
Date对象,表格会自动识别为日期格式;若需要自定义格式(如yyyy-MM-dd),可使用Utilities.formatDate方法。 - 目标行定位:通过筛选C列的非空值确定最后一行,确保从C7开始追加(若C列无数据则直接从第7行开始)。
设置每日定时触发
- 在Google脚本编辑器中,点击顶部菜单的编辑 -> 当前项目的触发器。
- 点击右下角的添加触发器按钮:
- 选择函数:
CopyRow - 选择事件源:时间驱动
- 选择类型:日计时器
- 选择时段:根据需求设置每日触发的时间(如“上午9点到10点”)
- 选择函数:
- 保存触发器,脚本会在指定时段自动执行。
内容的提问来源于stack exchange,提问作者S O
相关产品推荐
相关产品推荐

