2011-09-27 131 views
0

我正在尝试使用Office.Interoperability.Excel命名空间从Excel工作表读取数据。我想获取表格的第一行,因为第一行包含标题,而不指定开始和结束单元格。因为我不知道是否将新列添加到表单中。从C#读取Excel数据#

Microsoft.Office.Interop.Excel.Application excelObj = new Application(); 

    Microsoft.Office.Interop.Excel.Workbook myBook = excelObj.Workbooks.Open(@"D:\myFile.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 0, 0); 

    Microsoft.Office.Interop.Excel.Worksheet mySheet = (Worksheet)myBook.Sheets.get_Item(1); 

    Range range = mySheet.Cells.EntireRow; 

这里,范围变成整个范围,并且它不限于标题列的数量。此外,我还有大约10,000行的庞大数据需要处理。

回答

1

我认为你正在寻找这样的:

Range headers = mySheet.UsedRange.Rows(1); 
+0

它帮助:)虽然你不能直接使用行(1)... – Niranjan

+0

啊,是的 - 它适用于VBA,但不是C#。 – phoog

2

如果要求不介入写回到Excel文件,我建议你使用Excel数据读取器(http://exceldatareader.codeplex.com /),它有很多更容易使用,那并不需要擅长在服务器上,它的速度更快

+0

+1。是!所有这些Interop仪式......打哈欠。如果你还想写:Flexcel或Gembox(尽管不是免费的)。 –

+0

gr8工具...但我想出口回到excel以及:) – Niranjan

1

我刚才已经回答这里另一个Excel阅读问题:C# converting .xls to .csv without Excel

FileHelpers库非常适合你的任务。我自己使用它的行数及以上。

从Excel中读取行后,我不知道您在做什么,但是如果您查看一些可以分解为步骤的处理,请查看Rhino.Etl。这是处理大量数据的一种非常强大的方式。