如何使用Office Scripts在Excel Online为被修改行动态写入更新日期
最终可运行脚本
function main(workbook: ExcelScript.Workbook, modifiedRowNum: number) { // 1. 获取目标工作表 const targetSheet = workbook.getWorksheet("Form1"); if (!targetSheet) throw new Error("未找到Form1工作表"); // 2. 动态获取工作表实际使用范围,兼容空值、行列动态变动场景 const usedRange = targetSheet.getUsedRange(); if (!usedRange) throw new Error("工作表无有效数据"); // 3. 动态定位「Modified Date」列索引,兼容列位置变动场景 const headerValues = usedRange.getRow(0).getValues()[0]; const modifiedDateColIndex = headerValues.findIndex(header => header?.toString().trim() === "Modified Date"); if (modifiedDateColIndex === -1) throw new Error("未找到Modified Date列"); // 4. 转换行号为0-based索引(Excel传入行号为1-based) const targetRowIndex = modifiedRowNum - 1; // 校验行号合法性 if (targetRowIndex < 1 || targetRowIndex >= usedRange.getRowCount()) throw new Error("修改行号不合法"); // 5. 生成当前时间并写入对应单元格 const now = new Date(); const dateTimeStr = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`; targetSheet.getCell(targetRowIndex, modifiedDateColIndex).setValue(dateTimeStr); }
自动触发配置步骤
要实现修改行后自动写入时间,需要搭配Power Automate流完成触发配置:
- 新建自动化云端流,触发器选择「Excel Online (Business)」下的「当行被修改时」
- 选择对应的站点、文档库、Form1工作表,设置要监听的列范围
- 新增操作,选择「Excel Online (Business)」下的「运行脚本」
- 选择同位置的工作簿,选择上面编写的脚本,将触发器返回的行号参数填入脚本的
modifiedRowNum输入框
- 选择同位置的工作簿,选择上面编写的脚本,将触发器返回的行号参数填入脚本的
- 保存流即可生效
适配说明
- 不需要硬编码列号:自动从表头匹配「Modified Date」列,列调整位置后无需修改代码
- 兼容空值、动态行列:
getUsedRange会自动识别工作表实际有数据的范围,不受中间空行空列影响 - 自动定位修改行:通过触发器传入的实际修改行号定位,不需要手动指定单元格
如果仅需要手动运行脚本更新当前选中行的修改时间,可以删除
modifiedRowNum参数,在代码中添加一行:const modifiedRowNum = targetSheet.getActiveCell().getRowIndex() + 1;

内容的提问来源于stack exchange,提问作者WixLove
相关产品推荐
相关产品推荐

