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

C#使用EPPlus读取Excel时for循环break致程序冻结求助

问题分析与修复方案

核心问题:无限循环

你的代码里多个for循环缺少迭代器(比如row++、col++),比如最外层的for (int row = 2; row <= end.Row;),没有写row++,导致循环永远停在初始值,程序直接卡死。不管加不加break,只要循环没迭代,就会无限运行。

代码重构与修复

先给所有循环补上迭代器,再简化冗余的嵌套逻辑(原代码多层嵌套完全没必要,只会增加复杂度)。以下是修复后的代码,保留你要实现的核心逻辑:找到文本为"Номер Машины"的单元格后,读取它下一行同列的内容,再读取再下一行同列的首个非空内容:

// 遍历行,从第2行开始
for (int row = 2; row <= end.Row; row++) 
{
    // 遍历当前行的列
    for (int col = start.Column; col <= end.Column; col++) 
    {
        string cellValue = ws.Cells[row, col].Text;

        // 找到目标单元格
        if (string.Compare(cellValue, "Номер Машины", true) == 0)
        {
            // 读取下一行同列的内容
            if (row + 1 <= end.Row)
            {
                string nextRowCell = ws.Cells[row + 1, col].Text;
                MessageBox.Show(nextRowCell);
            }

            // 读取再下一行同列的第一个非空内容
            for (int row__ = row + 2; row__ <= end.Row; row__++) 
            {
                string cellValue__ = ws.Cells[row__, col].Text;
                if (!string.IsNullOrEmpty(cellValue__))
                {
                    MessageBox.Show(cellValue__);
                    break; // 找到非空内容就退出循环
                }
            }

            // 找到目标后退出列循环,避免继续查找其他列
            break;
        }
    }
    // 找到目标后退出行循环,避免继续查找其他行
    break;
}

关键优化点

  • 给所有for循环补上迭代器,确保循环能正常结束。
  • 去掉不必要的多层嵌套,把逻辑扁平化,更易维护和调试。
  • 添加边界判断(比如row + 1 <= end.Row),避免越界访问Excel单元格。
  • 只在需要的地方使用break,比如找到目标内容后退出循环,减少无效遍历。

内容的提问来源于stack exchange,提问作者deinmar_krain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:29:57