Linq操作Excel:如何正确获取符合条件的行号
搞定Excel行号筛选的问题!
嘿,你遇到的这个问题我之前也踩过坑——核心是你对x.Rows的理解有点偏差啦!这里的x是单个单元格对象(比如用EPPlus处理Excel时的ExcelRangeBase),x.Rows返回的是这个单元格所属的行范围对象,不是直接给你行号。当你把这个对象塞进列表时,它默认显示的是这个范围里的行数(单个单元格的行范围当然只有1行啦),所以你才会得到一堆1,而不是想要的1到12的行号。
给你修正后的代码
直接获取单元格的行索引就行,以常用的EPPlus库为例:
var selectedrows = range.Where(x => x.Text == domain.Name) .Select(x => x.Start.Row) // 这才是单元格的实际行号 .ToList();
为啥这样就对了?
x.Start.Row:对于单个匹配的单元格来说,Start.Row就是它所在的真实行号;哪怕你选的是多单元格范围,也能拿到起始行号,完全适配你的场景。- 如果你用的是其他Excel处理库(比如NPOI),行号属性可能叫
RowIndex,注意有些库的行号是从0开始计数的,要根据库的规则微调哦。
小技巧
不确定的话,可以先在筛选后加个打印验证:
foreach(var cell in range.Where(x => x.Text == domain.Name)) { Console.WriteLine(cell.Start.Row); // 先确认行号是不是你要的 }
确认没问题再把它放进列表里,就不会踩坑啦!
内容的提问来源于stack exchange,提问作者Carlove
相关产品推荐
相关产品推荐

