VB.NET中Worksheet.UsedRange.Rows.Count获取已用行数结果错误问题
解决VB.NET中获取Excel工作表实际已用行数的问题
我之前在VB.NET里尝试获取Excel工作表的已用行数,先后写了两段代码:
第一段代码:
Dim objWorksheet As Excel.Worksheet = workbook.Sheets(2) Dim lastRow = objWorksheet.UsedRange.Rows.Count
第二段是参考了别人的建议后写的:
Dim range As Excel.Range = objWorkSheet.UsedRange Dim lastRow = range.Rows.Count
结果两次得到的lastRow数值都比实际的已用行数要少,折腾了好一会儿才找到问题所在和解决方案。
问题根源
原来UsedRange.Rows.Count的逻辑并不是统计所有有数据的行的数量,它计算的是从第一个有数据的行到最后一个有数据的行之间的总行数:
- 如果首尾行之间有空行,这个数值不会受影响;
- 但如果工作表的开头存在空白行,比如首行是空的,那结果就会比实际非空行的数量少1,要是首两行都空,就会少2,这就是为什么之前的代码得不到准确结果。
解决方案
正确的获取方式可以参考下面的步骤(如图所示):
另外也可以用更可靠的代码来直接获取最后一行的行号,比如从指定列的末尾向上查找第一个非空单元格:
' 获取A列最后一个非空行的行号 Dim lastRow As Integer = objWorksheet.Cells(objWorksheet.Rows.Count, 1).End(Excel.XlDirection.xlUp).Row
或者获取整个工作表中最后一个有数据的单元格的行号(注意如果有残留格式可能需要先刷新UsedRange):
objWorksheet.UsedRange ' 先刷新UsedRange Dim lastRow As Integer = objWorksheet.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
内容的提问来源于stack exchange,提问作者Fisher
相关产品推荐
相关产品推荐

