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

如何从嵌套循环中输出多个单元格?附相关代码示例

实现嵌套循环中输出匹配字段的多个单元格

我来帮你完善这段代码,实现找到匹配指定字段的单元格并输出的功能。核心思路是遍历每个单元格,清理内容后和fields里的字段值做匹配,匹配成功时输出单元格信息或者存入结果对象。

完整修改后的代码

start() {
  // 自动生成A-Z列,不用手动逐个输入
  const columns = Array.from({length:26}, (_,i) => String.fromCharCode(65+i));
  let fields = {
    id: ['Medlemsnummer'],
    name: ['Namn'],
    // 可以在这里添加更多字段映射,比如 email: ['E-post']
  };
  let out = {};
  let self = this;

  // 提前初始化结果容器,避免后续添加数据时出现undefined
  Object.keys(fields).forEach(key => {
    out[key] = [];
  });

  columns.forEach(function(column) {
    for(let row = 1; row < 101; row++) {
      let cell = column + row;
      let d_cell = self.worksheet[cell];
      let val_cell = (d_cell ? d_cell.v : ' ');
      let cell_string = val_cell.toString().toLowerCase();
      // 移除换行、回车并去除首尾空白,统一格式方便匹配
      let cellString_stripped = cell_string.replace(/(?:\n|\r|\r\n)/g, '').trim();

      // 内层循环:匹配fields中的字段
      for (var key in fields) {
        // 跳过Object原型链上的属性,避免不必要的遍历
        if (!fields.hasOwnProperty(key)) continue;
        
        // 遍历当前字段对应的所有匹配文本(支持一个字段对应多个匹配值)
        fields[key].forEach(fieldValue => {
          const normalizedField = fieldValue.toLowerCase().trim();
          if (cellString_stripped === normalizedField) {
            // 实时输出匹配到的单元格信息
            console.log(`找到匹配字段「${key}」的单元格:${cell},内容:${val_cell}`);
            // 同时将结果存入out对象,方便后续批量处理
            out[key].push({
              cellPosition: cell,
              originalValue: val_cell
            });
          }
        });
      }
    }
  });

  // 遍历结束后输出所有匹配结果的汇总
  console.log('所有匹配结果汇总:', out);
}

关键修改说明

  • 自动生成列名:用Array.from自动生成A-Z列,不用手动逐个输入,更简洁高效
  • 统一匹配格式:对单元格内容和字段值都做了小写、去空白处理,避免因大小写或换行导致的匹配失败
  • 完善结果存储:提前初始化out对象的字段数组,确保后续可以正常存入匹配数据
  • 灵活匹配支持:支持一个字段对应多个匹配文本(比如id可以同时匹配「Medlemsnummer」和「会员编号」)
  • 双重输出方式:既在控制台实时打印匹配到的单元格,又把结果存入对象,兼顾即时查看和后续批量处理需求

扩展小技巧

  • 如果需要模糊匹配(比如单元格内容包含字段文本,而非完全相等),可以把===替换成includes:
    if (cellString_stripped.includes(normalizedField)) {
      // 匹配逻辑不变
    }
    
  • 如果只需要输出单元格位置(比如A1、B5),可以简化输出语句为console.log(cell)

内容的提问来源于stack exchange,提问作者J.Wennergren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:29:50