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

Excel 365:用Office Script将非空单元格公式转值及固定唯一ID方案

Excel 365 固定唯一ID生成与Office Script优化方案

一、修改现有Office Script:仅将非空单元格转为值

原代码会整列覆盖公式,以下是添加判断逻辑后的版本,仅处理非空单元格,空单元格保留原公式:

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    const targetRange = selectedSheet.getRange("B10:B109");
    const cellValues = targetRange.getValues();
    const cellFormulas = targetRange.getFormulas();

    // 遍历每个单元格,非空则转为值,空则保留公式
    for (let rowIndex = 0; rowIndex < cellValues.length; rowIndex++) {
        const currentCell = targetRange.getCell(rowIndex, 0);
        if (cellValues[rowIndex][0] !== "") {
            currentCell.setValue(cellValues[rowIndex][0]);
        } else {
            currentCell.setFormula(cellFormulas[rowIndex][0]);
        }
    }
}

代码说明

  • 先批量获取目标区域的所有值和公式,避免频繁读写单元格提升效率
  • 逐行判断单元格内容:非空则直接写入值(移除公式),空单元格恢复原公式,确保后续新增数据能自动生成ID

二、无需手动操作的固定唯一ID生成更佳方案

方案1:表格+SEQUENCE函数自动生成自增ID

如果你的数据是Excel表格(List Object),可以实现ID自动生成+自动固定:

  1. 选中数据区域,按Ctrl+T转为表格,勾选「我的表格有标题」
  2. 在ID列首行输入公式:=SEQUENCE(ROWS([@]),,COUNTA($B$1:$B1),1)
    • 原理:新增行时,COUNTA($B$1:$B1)统计已有ID数量,让新ID从下一个整数开始
  3. 绑定之前的Office Script到表格的新增行事件,新增的ID会自动转为固定值,无需手动执行脚本

方案2:RANDARRAY+UNIQUE生成随机唯一ID

如果需要非自增的随机唯一ID,用以下公式:
=UNIQUE(RANDARRAY(100,1,1000,9999,TRUE))

  • 生成100个1000-9999之间的不重复随机整数,UNIQUE确保无重复
  • 同样配合修改后的Office Script,将已生成的ID转为固定值

方案3:Office Script直接生成固定唯一ID(一步到位)

完全跳过公式环节,用脚本直接为空白单元格生成唯一ID,无需后续转值操作:

function main(workbook: ExcelScript.Workbook) {
    const selectedSheet = workbook.getActiveWorksheet();
    const usedRange = selectedSheet.getUsedRange();
    const idColumn = usedRange.getColumn(1); // 假设ID在第2列(索引从0开始)
    const idValues = idColumn.getValues();

    // 为空白单元格生成时间戳+随机数的唯一ID
    for (let rowIndex = 0; rowIndex < idValues.length; rowIndex++) {
        if (idValues[rowIndex][0] === "") {
            // 时间戳确保全局唯一性,随机数避免毫秒级重复
            const uniqueId = `${Date.now()}${Math.floor(Math.random() * 1000)}`;
            idColumn.getCell(rowIndex, 0).setValue(uniqueId);
        }
    }
}
  • 可以将该脚本绑定到工作簿打开事件或表格新增行事件,实现ID全自动生成,完全无需手动干预

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:52:23