如何设置Office Script动态自动填充至数据最后一行
解决Excel Script自动填充指定列至数据最后一行(不填充空白行)的问题
要实现从B2开始自动填充到数据的最后一行且不填空白行,核心是动态获取真正有数据的最后行号,而非硬编码或整列操作。以下是修改后的实用脚本:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getActiveWorksheet(); // 以A列为参考获取数据最后一行(假设A列是无空白的主数据列) const lastRow = selectedSheet.getRange("A:A").getLastCell().getRowIndex() + 1; // 构建精准的填充范围:B2到B列最后数据行 const fillRange = `B2:B${lastRow}`; // 执行自动填充 selectedSheet.getRange("B2").autoFill(fillRange, ExcelScript.AutoFillType.fillDefault); }
关键细节说明:
- 为什么用A列参考:因为要填充的B列本身可能只有B2有内容,用相邻的、包含完整记录的列(比如A列)才能准确获取真实数据的最后行,避免把空白行算进去。如果你的主数据列不是A列,直接把
"A:A"改成对应列即可(比如C列写"C:C")。 - 行号转换逻辑:
getRowIndex()返回的是从0开始的索引值,所以要加1才能转换成Excel的常规行号(比如索引2对应第3行)。 - 避免整列操作:直接用
B:B会触发Excel的性能限制导致报错,动态生成的范围只覆盖有数据的区域,既高效又不会填充空白。
如果你的表格是Excel结构化表格(List Object),可以用下面的方式更精准定位:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getActiveWorksheet(); // 获取工作表中的第一个结构化表格 const table = selectedSheet.getTables()[0]; if (!table) { console.log("当前工作表无结构化表格"); return; } // 获取表格最后数据行的行号 const lastRow = table.getRange().getLastCell().getRowIndex() + 1; const fillRange = `B2:B${lastRow}`; selectedSheet.getRange("B2").autoFill(fillRange, ExcelScript.AutoFillType.fillDefault); }
内容的提问来源于stack exchange,提问作者Dylan L
相关产品推荐
相关产品推荐

