ClosedXML中IXLRangeRows无法转换为IXLRange如何实现多级筛选
解决方法
你可以直接调用IXLRangeRows提供的AsRange()扩展方法,将筛选得到的行集合转换为IXLRange类型,即可保持类型统一用于递归逻辑。
基础使用示例
// 1. 读取初始使用范围,类型为IXLRange IXLRange originalRange = workSheet.RangeUsed(); // 2. 第一次筛选第一列为「Division 1」的行,调用AsRange()转成IXLRange IXLRange filteredRange = originalRange .Rows(r => r.Cell(1).GetString().Equals("Division 1")) .AsRange(); // 3. 第二次筛选第二列符合条件的行,逻辑完全一致,结果仍为IXLRange filteredRange = filteredRange .Rows(r => r.Cell(2).GetString().Equals("你需要匹配的第二列值")) .AsRange();
递归逻辑适配示例
可以封装统一的筛选递归方法,入参和返回值都为IXLRange即可:
// 递归筛选方法示例,columnIndex为当前要筛选的列序号,targetValue为当前要匹配的值 public IXLRange RecursiveFilter(IXLRange inputRange, int columnIndex, string targetValue) { var matchedRows = inputRange.Rows(r => r.Cell(columnIndex).GetString().Equals(targetValue)); // 无匹配结果时提前返回,避免后续逻辑报错 if (!matchedRows.Any()) { return null; } var resultRange = matchedRows.AsRange(); // 此处补充你的递归终止条件和后续递归逻辑即可 // if (终止条件) return resultRange; // return RecursiveFilter(resultRange, 下一列序号, 下一个匹配值); }
内容的提问来源于stack exchange,提问作者hinho
相关产品推荐
相关产品推荐

