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

修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:27:29