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

Google Apps Script/Sheets如何从列末数据单元格自动填充至表格最后一行

问题场景
  • 现有电子表格中A、C、D等其余列数据均延伸至表格最后一行(如第40行),仅B列数据仅填充到第25行左右
  • 需求:从B列最后一个有数据的单元格开始,自动识别已有内容的序列规则,延续填充到表格最后一行,效果和手动拖拽单元格右下角填充一致,不能仅复制相同值覆盖空单元格
  • 现有初步脚本运行时报错:第7行抛出Exception: Range not found,无法正确指定序列起始范围

Google表格截图

现有报错脚本如下:

function fillDownFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var sc = ss.getRange("B1:B").getValues();
  var scr = sc.filter(String).length;
  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(scr,2,lr)
  ss.getRange(scr).copyTo(fillDownRange);
  
}
报错原因
  • ss.getRange(scr)写法不符合API规则:单参数传入getRange时仅支持A1格式的字符串,传入数字会直接触发范围不存在的报错
  • getRange(row, column, numRows)的第三个参数代表需要选取的总行数,不是截止行号,直接传入最后一行号lr会导致选取范围长度错误
  • 普通copyTo方法仅复制单元格内容/格式,不会触发表格自带的序列识别填充逻辑,达不到手动填充的效果
可用修复代码
function fillDownFunction() {
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 计算B列最后一个有数据的行号
  const lastColBDataRow = activeSheet.getRange("B:B").getValues().filter(String).length;
  // 获取全表最后一行行号
  const sheetLastRow = activeSheet.getLastRow();
  // 选中从B列最后一个有数据单元格开始,到全表最后一行的完整范围
  const fillRange = activeSheet.getRange(lastColBDataRow, 2, sheetLastRow - lastColBDataRow + 1);
  // 调用官方自动填充方法,使用默认序列识别规则,和手动拖拽填充效果完全一致
  fillRange.autoFill(fillRange, SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
}
使用说明
  • 脚本运行后会自动识别B列已有内容的序列规则,支持等差/等比数字、日期、预设文本序列等所有手动填充支持的规则
  • 范围计算已做边界处理,不会出现越界、选不中范围的问题
  • 不需要手动指定序列步长、规则,全部由表格内置逻辑自动判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:12:35