我有一个excel模板,其中我有1-100行,只有ID,我的其他列名和电子邮件是空的。
ID Name Email
1
2
3
.
.
100
这里我在excel中没有数据,当我尝试获取行数时,我得到100,但我想获得数据填充的名称或电子邮件的行数,我该怎么做。
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Open(fileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
int iRowCount = xlWorkSheet.UsedRange.Rows.Count;
答案 0 :(得分:2)
您必须遍历行,因为Excel将始终显示工作表使用的最大行数和列数。
另外,我建议你不要使用Excel来读取数据。而是使用一些可以直接读取文件的库(而不是依赖于Excel安装)。我非常成功地使用http://exceldatareader.codeplex.com/(至少对于xlsx文件)。你可能还想下载最新的资源并自己构建它们,因为发布不是很新,并且有很多修复。
PS如果不使用Excel,你也会解决性能问题,因为你在代码中使用的Excel非常慢,当你开始遍历行时,这真的很重要。
另一方面,ExcelDataReader将从excel工作表中提供DataTable数据,并且能够在内存中解析它,这比使用excel要快100-1000倍。答案 1 :(得分:0)
您必须访问列中的每个单元格,并使用以下命令检查它是否包含数据:
xlWorkSheet.Cells(x, y).Value
答案 2 :(得分:0)
一种简单的方法是检查哪些行包含名称或电子邮件的某些值。 使用
System.Array values = (System.Array)range.Cells.Value;
之后遍历数组并检查Name或Email是否与string.IsNullOrWhiteSpace不同。