我有c#windows应用程序正在读取文件内容。我想只从已使用的行中提取值。
我正在使用此代码:
int rows = ExcelWorksheet.UsedRange.Rows.Count;
一切正常。除非我在顶部有空行,否则计数将不正确。
-File没有特殊字符,公式等。只是简单的文字。
- 如果文件顶部没有空行,应用程序可以读取excel xls和xlsx没有问题。
答案 0 :(得分:0)
好的,现在我已经意识到我做错了。当然它不会读取我的所有UsedRange.Rows
,因为在我的for
循环中,我始终在第一行开始阅读。所以我将((Microsoft.Office.Interop.Excel.Range)(ExcelWorksheet.UsedRange)).Row;
作为阅读的起点
此代码有效:
int rows = ExcelWorksheet.UsedRange.Rows.Count;
int fRowIndex = ((Microsoft.Office.Interop.Excel.Range)(ExcelWorksheet.UsedRange)).Row;
int rowCycle = 1;
for (int rowcounter = fRowIndex; rowCycle <= rows; rowcounter++)
{
//code for reading
}
答案 1 :(得分:0)
不是逐行读取Excel,而是更好地将它作为范围在C#中获取,然后将其作为
处理Sheet.UsedRange.get_Value()
表单中的整个UsedRange。无论何时你想获得UsedRange的一部分,都可以将其作为
Excel.Range cell1 = Sheet.Cells[r0, c0];
Excel.Range cell2 = Sheet.Cells[r1, c1];
Excel.Range rng = Sheet.Range[cell1, cell2];
var v = rng.get_Value();
根据[r1-r0,c1-c0]
的值,你知道C#内存中 v 的大小