2015-03-02 60 views
-1

我跟着這個非常有希望的link使我的程序讀取Excel文件,但我得到的問題是System.OutOfMemoryException。據我所知,發生這種情況的原因是因爲這一塊代碼用Interop.Excel讀取大型Excel文件導致System.OutOfMemoryException

object[,] valueArray = (object[,])excelRange.get_Value(
      XlRangeValueDataType.xlRangeValueDefault); 

它將整個數據列表加載到一個變量中。我不明白爲什麼圖書館的開發人員決定這樣做,而不是製作一個迭代器,它會一行一行解析一個表格。所以,我需要一些能夠讀取大型(> 700K行)Excel文件的工作解決方案。

+0

您應該指定您需要從Excel文件中讀取的內容。這可能是值得考慮OLEDB閱讀Excel文件的方式。例如。如果您需要閱讀一些特定的行,並且您使用的是OLEDB,則可以縮小連接字符串中的搜索查詢範圍:'String query =「SELECT * FROM [Sheet1 $ A1:E346]」;' – 2015-03-02 22:43:01

+0

也不會看到什麼你已經做了代碼明智的方面的鏈接,很難告訴你,如果你錯過了什麼或不可以編輯和張貼你的實際代碼.. – MethodMan 2015-03-02 23:13:29

+0

http://stackoverflow.com/questions/7244971/how-doi-i-進口從-Excel到一個使用微軟辦公,數據集 - - 互操作-的Excel/7245188#7245188 – reggie 2015-03-03 00:25:08

回答

1

我使用下面的函數在我C#應用程序之一:

string[,] ReadCells(Excel._Worksheet WS, 
         int row1, int col1, int row2, int col2) 
     { 
      Excel.Range R = WS.get_Range(GetAddress(row1, col1), 
             GetAddress(row2, col2)); 
      .... 
     } 

之所以要讀一個Range去,而不是細胞通過細胞的性能。 對於每個單元訪問,都有很多內部數據傳輸正在進行。如果Range太大而無法放入內存,則可以使用更小的塊進行處理。

相關問題