使用c#在excel中获取指定的行数

时间:2011-11-25 12:09:01

标签: c#

我有一个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;

3 个答案:

答案 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不同。