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

C# WinForm中Excel AutoFilter遍历异常问题求助

问题分析

你的代码存在三个核心问题,导致一直重复生成首个客户的工作表:

  • 筛选条件未动态变更:循环里始终用machine2.Value,这是整个AA2:AA{lastRow4}范围的默认值(即首个单元格内容),完全没用到当前循环的facility项。
  • 筛选列索引错误:AA列对应Excel的第27列(A=1,AA=27),但你用3作为AutoFilter的列参数,实际在筛选C列,逻辑完全偏离需求。
  • 未处理重复标识:AA列存在重复客户标识时,会重复创建相同数据的工作表,极端情况下会导致无限循环。
修正方案
  1. 提取唯一客户标识:先收集AA列所有非空值并去重,避免重复处理相同客户。
  2. 修正筛选逻辑:用AA列的正确索引27,循环时取当前唯一标识作为筛选条件。
  3. 规范循环项取值:遍历Range时,每个facility是单个单元格对象,需取Value2(比Value更稳定)作为筛选值。
  4. 清理自动筛选:每次操作后关闭自动筛选,避免影响后续执行。
完整修正代码
// 获取AA列最后一行(优化写法,避免全列计数的冗余)
int lastRow4 = newerWSCopy.Cells[newerWSCopy.Rows.Count, "AA"].End(Excel.XlDirection.xlUp).Row;

// 提取AA列第2行到最后一行的非空唯一值
var uniqueFacilities = newerWSCopy.Range["AA2:AA" + lastRow4]
                            .Cast<Excel.Range>()
                            .Where(r => r.Value2 != null)
                            .Select(r => r.Value2.ToString())
                            .Distinct()
                            .ToList();

// 遍历每个唯一客户标识
foreach (var facility in uniqueFacilities)
{
    // 关闭之前的自动筛选(如果存在)
    if (newerWSCopy.AutoFilterMode)
        newerWSCopy.AutoFilterMode = false;

    // 对AA列(第27列)筛选当前客户标识
    newerWSCopy.Range["A1:I" + lastRow4].AutoFilter(Field: 27, Criteria1: facility);
    
    // 复制可见单元格区域
    newerWSCopy.AutoFilter.Range.SpecialCells(Excel.XlCellType.xlCellTypeVisible).Copy();
    
    // 创建新工作表并粘贴,给工作表命名为客户标识方便识别
    Excel.Worksheet newWS = xlApp2.Worksheets.Add(After: xlWorkbook2.Sheets[xlWorkbook2.Sheets.Count]);
    newWS.Name = facility;
    newWS.Paste();
    newWS.AutoFilterMode = false;
    
    // 清除剪贴板,释放资源
    xlApp2.CutCopyMode = false;
}

// 最后关闭原工作表的自动筛选
if (newerWSCopy.AutoFilterMode)
    newerWSCopy.AutoFilterMode = false;
额外优化建议
  • 如果客户标识是数字类型,去掉ToString(),直接用r.Value2即可。
  • 大数据量操作时,建议关闭Excel的屏幕更新和事件,提升运行速度:
    xlApp2.ScreenUpdating = false;
    xlApp2.EnableEvents = false;
    // 执行核心代码后恢复
    xlApp2.ScreenUpdating = true;
    xlApp2.EnableEvents = true;
    
  • 操作完成后务必释放所有Excel对象(Range、Worksheet、Workbook、Application),避免进程残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:22