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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:44:56