2011-09-27 156 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。這是處理大量數據的一種非常強大的方式。