ExcelScript遍历表格匹配行并复制公式问题求助
问题分析与解决
原代码的核心问题是内层循环强制i=0,导致每次只会读取第0行的公式;同时没有维护目标工作表的写入位置,无法将匹配到的公式依次写入到工作表B(Testing)的C列。
修改后的代码
function main(workbook: ExcelScript.Workbook) { // 获取源工作表和目标工作表 let fermLog = workbook.getWorksheet("Fermenter Log"); let testing = workbook.getWorksheet("Testing"); // 源数据范围:E列(判断列)和B列(公式列),从第4行开始 let fermLogSampleRange = fermLog.getRange("E4:E2000"); let fermLogTimeRange = fermLog.getRange("B4:B2000"); // 获取判断列的所有值 let sampleValues = fermLogSampleRange.getValues(); // 目标写入起始行:C列第4行(ExcelScript索引从0开始,C4对应行索引3) let targetRow = 3; const matchStr = "Yes"; // 遍历判断列的每一行 sampleValues.forEach((row, rowIndex) => { // 当前行的判断值是否为"Yes" if (row[0] === matchStr) { // 获取源工作表对应行B列的公式 const formula = fermLogTimeRange.getCell(rowIndex, 0).getFormula(); // 将公式写入目标工作表的C列对应行 testing.getRange(`C${targetRow + 1}`).setFormula(formula); // 目标行自增,准备写入下一个匹配项 targetRow++; } }); }
关键改动说明
- 移除内层固定
i=0的循环,改用forEach遍历行,通过rowIndex精准定位源数据的对应行 - 新增
targetRow变量记录目标工作表C列的写入位置,每匹配成功一次就自增,实现依次写入 - 直接通过行号拼接定位目标单元格(
C${targetRow + 1}),直观对应Excel的单元格地址 - 使用严格相等
===进行字符串匹配,避免类型转换导致的错误
内容的提问来源于stack exchange,提问作者Guy Schulz
相关产品推荐
相关产品推荐

