You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写/修改Google Sheets脚本:统计末行并追加数据而非覆盖

我来帮你解决这两个Google Apps Script的问题:

问题1:统计表格最后一行并将数据添加至新空白行的代码

这里我假设你需要获取表格数据区域的最后一行完整内容,再将其复制到下方的新空白行中。以下是带详细注释的实现代码:

function copyLastRowToNewRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // 替换成你实际使用的工作表名称,比如'Sheet1'
  var sheet = ss.getSheetByName('Sheet1');
  
  // 获取数据区域的最后一行(自动忽略完全空白的行)
  var lastRow = sheet.getLastRow();
  // 获取最后一行的所有数据(这里默认取所有列,你可以根据需求调整列范围,比如只取A到C列就把最后一个参数改成3)
  var lastRowData = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  // 在最后一行下方插入新空白行
  sheet.insertRowAfter(lastRow);
  // 将最后一行的数据写入新插入的行
  sheet.getRange(lastRow + 1, 1, 1, lastRowData.length).setValues([lastRowData]);
}
  • 如果只需要复制最后一行的特定列,修改getRange的列参数即可,比如只复制M列就改成getRange(lastRow, 13, 1, 1)
  • getValues()返回的是二维数组,用[0]可以取出对应行的一维数据集合
问题2:修改脚本实现自动粘贴到下一个空白行

你的原脚本核心问题是固定了目标单元格为L45,所以每次运行都会覆盖这个位置的内容。我们需要先找到L列最后一个有数据的行,再将数据粘贴到它的下一行,具体调整如下:

修改后的完整代码:

function moveValuesOnly() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var source = ss.getRange('M4'); 
  // 获取目标工作表(如果是当前活动表,用ss.getActiveSheet()即可)
  var targetSheet = ss.getActiveSheet();
  
  // 找到L列(第12列)最后一个有数据的行号
  var lastLRow = targetSheet.getRange('L:L').getValues().filter(String).length;
  // 动态计算目标行:如果L列全空则从45行开始(和原脚本初始位置一致),否则取最后一行的下一行
  var targetRow = lastLRow === 0 ? 45 : lastLRow + 1;
  
  // 复制到L列的目标空白行
  source.copyTo(targetSheet.getRange('L' + targetRow), {contentsOnly: true});
}

关键调整点说明:

  1. 新增L列最后一行的判断逻辑:通过getRange('L:L').getValues().filter(String).length统计L列非空单元格的数量,得到最后一个有数据的行号
  2. 动态计算目标行位置:保留原脚本的初始行45作为兜底(当L列无数据时),否则自动定位到下一个空白行
  3. 修改copyTo的目标范围:把固定的L45替换为动态拼接的'L' + targetRow,实现自动追加效果

这样修改后,每次修改M4的日期再运行脚本,数据就会自动追加到L列的下一个空白行,不会再覆盖之前的内容了。

内容的提问来源于stack exchange,提问作者Nuclear 420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:38