在线Excel:将Working List中AI列值为Yes的行复制到Completed表的脚本需求
修正Excel Script实现批量复制符合条件的行到目标表
问题背景
需要将「Working List」工作表中AI列(对应表格Completed_WL的Completed字段)值为Yes的行(A至AN列),以值的形式批量复制到「Completed」工作表的Table2中,原脚本仅能复制第一行,需修正实现批量复制。
修正后的脚本
function main(workbook: ExcelScript.Workbook) { // 获取Working List工作表 const workingListSheet = workbook.getWorksheet("Working List"); // 获取Completed_WL表格(AI-AN列区域) const completedWLTable = workbook.getTable("Completed_WL"); // 对Completed列应用值过滤,仅显示Yes的行 const completedColumn = completedWLTable.getColumnByName("Completed"); completedColumn.getFilter().applyValuesFilter(["Yes"]); // 获取过滤后Completed_WL表格的所有可见行数据区域 const visibleRowsRange = completedWLTable.getRangeBetweenHeaderAndTotal().getVisibleView().getRange(); // 获取对应行的A列(Claimed)数据区域 const claimedRange = workingListSheet.getRange( `A${visibleRowsRange.getRowIndex() + 1}:A${visibleRowsRange.getRowIndex() + visibleRowsRange.getRowCount()}` ); // 提取Claimed列和Completed_WL可见行的数据并合并(对应A-AN列的内容) const claimedValues = claimedRange.getValues(); const completedWLValues = visibleRowsRange.getValues(); const combinedData = claimedValues.map((row, idx) => [...row, ...completedWLValues[idx]]); // 将合并后的数据批量追加到目标表格Table2,仅复制值 const targetTable = workbook.getTable("Table2"); targetTable.addRows(null, combinedData); // 清除过滤条件,恢复原始视图 completedColumn.getFilter().clear(); }
关键修改说明
- 精准定位工作表:直接指定
Working List工作表,避免依赖当前激活工作表的不确定性 - 批量获取可见行:通过
getVisibleView().getRange()获取过滤后的所有可见行区域,替代原脚本的单行选择 - 合并所需列数据:将A列(Claimed)与AI-AN列(Completed_WL)的数据合并,确保复制范围覆盖A至AN列
- 批量追加数据:使用
addRows方法一次性将所有符合条件的行追加到目标表,高效完成批量复制 - 值形式复制:通过
getValues提取纯数据,追加到目标表时自动以值的形式插入,避免公式或链接
使用提示
- 保存脚本后,可在Excel界面添加按钮关联该脚本,手动触发执行
- 如需每日自动运行,可通过Power Automate创建定时流,调用此Excel Script
- 脚本仅执行追加操作,不会删除「Working List」中的原行,满足数据集更新后自动过滤的需求
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

