修改Excel自动化脚本以动态识别最后一行
ExcelScript 动态识别最后一行并替换固定行号
原脚本使用固定行号3922,无法适配不同Excel文件的行数量差异。以下是修改后的代码,实现动态获取数据区域最后一行,同时完全保留原有操作逻辑:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getActiveWorksheet(); // 动态获取B列最后一行(原逻辑依赖B列数据,以此作为有效行判断依据) const lastRow = selectedSheet.getRange("B:B").getLastCell().getRowIndex() + 1; // Excel行号从1开始,索引从0开始 // Insert at range C:C on selectedSheet, move existing cells right selectedSheet.getRange("C:C").insert(ExcelScript.InsertShiftDirection.right); // Insert at range C:C on selectedSheet, move existing cells right selectedSheet.getRange("C:C").insert(ExcelScript.InsertShiftDirection.right); // Set range C1:D2 on selectedSheet selectedSheet.getRange("C1:D2").setFormulasLocal([["Age","Aging"],["=TODAY()-B2",null]]); // Set number format for range C2 on selectedSheet selectedSheet.getRange("C2").setNumberFormatLocal("General"); // Auto fill range - 替换固定行号为动态lastRow selectedSheet.getRange("C2").autoFill(`C2:C${lastRow}`, ExcelScript.AutoFillType.fillCopy); // Set range D2 on selectedSheet selectedSheet.getRange("D2").setFormulaLocal("=VLOOKUP(C2,Sheet1!A:B,2,1)"); // Auto fill range - 替换固定行号为动态lastRow selectedSheet.getRange("D2").autoFill(`D2:D${lastRow}`, ExcelScript.AutoFillType.fillCopy); // Paste to range C:D on selectedSheet from range C:D on selectedSheet selectedSheet.getRange("C:D").copyFrom(selectedSheet.getRange("C:D"), ExcelScript.RangeCopyType.values, false, false); }
关键修改说明
- 动态获取有效行号:以B列为基准(原公式依赖B列数据),通过
getLastCell()定位最后一个非空单元格,转换为Excel标准行号(脚本索引从0开始,行号从1开始,因此加1) - 替换固定行号引用:将两处
autoFill的固定范围改为模板字符串C2:C${lastRow}、D2:D${lastRow},实现随文件自动适配 - 完全保留原有操作:插入列、表头设置、公式定义、格式调整、值复制等逻辑均与原代码一致
内容的提问来源于stack exchange,提问作者Kireeti Srestaluri
相关产品推荐
相关产品推荐

