2009-12-30 66 views
1

我必須打開一個大型的Excel文件150MB與半記錄(Excel 2007年.xlsx文件),我必須將其遷移到SQL Server,我使用oledbconnection,但是當我嘗試打開連接時,需要超過5分鐘,然後出現System.OutMemoryExcepion。我認爲這個連接試圖打開內存中的所有文件,我該如何逐行閱讀。 我用Visual網2005和C#C#打開大型Excel文件(150MB)OledbConnection System.OutOfMemoryException

string archivoExcel="c:\largeExcel.xlsx" 
string conneStringInraSIS = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
            "Data Source=" + archivoExcel + ";" + 
            "Extended Properties='Excel 12.0;HDR=YES;'"; 


OleDbConnection connexcel = new OleDbConnection(conneStringInraSIS); 
connexcel.Open();   
+0

它是150MB還是250MB? – SLaks 2009-12-30 00:54:02

+1

你應該使用'OleDbConnectionStringBuilder'來建立你的連接字符串,而不是手動連接字符串,否則如果文件名有'''你會失敗。 – SLaks 2009-12-30 00:55:12

+1

該文件是什麼?它可以保存爲CSV格式嗎?另外,2007 Excel只是一堆壓縮的XML文件。你可以直接用文本閱讀器來操縱這些閱讀器,一次閱讀1000行。 – 2009-12-30 00:55:58

回答

0

新建答案(基於評論)工作:

查找到VSTO。我會創建一個插件,允許管理員點擊一個功能區按鈕將數據上傳到SQL Server,然後從SQL Server中檢索信息(這將允許Excel處理它自己的文件,它究竟是如何做到最好)。

這裏是一個應該讓你開始一個鏈接:MSDN Code Sample

,你可以下載VSTO here

+0

謝謝,但我有商業邏輯做,我必須更新Excel文件,我不知道該怎麼辦 – David 2009-12-30 01:20:43

+0

什麼樣的業務邏輯?你是什​​麼意思你必須更新文件? - 根據您嘗試的內容,您可能可以在SSIS中執行此操作 – 2009-12-30 01:32:34

+0

但是,如果您願意,可以將xlsx文件轉換爲csv文件。然後使用此鏈接有效地加載csv文件:http://www.codeproject.com/KB/database/CsvReader。aspx – 2009-12-30 01:37:02

1

優先級#1應該從xlsx電子表格中獲取數據。一旦發生,請應用業務邏輯。我會從表格中導出CSV並處理它們。

+0

這progrma是一個經理誰有很多excel文件,他從其他人得到這些文件,他想要2件事情1.-上傳所有文件在SQL服務器數據庫,並獲得報告。 2.-用一些數據庫信息更新這些excel文件(他選擇的表和字段) – David 2009-12-30 01:52:19

0

一些評論建議將Excel文件導出爲CSV並逐行解析CSV文件,但這似乎不是解決您的問題的方法。

但是,您可以執行的操作是使用Excel ActiveX對象打開xlsx文件並將其作爲CSV保存在代碼中。 Workbook對象具有采用文件格式的SaveAs方法。

因此,您可以直接從xlsx文件獲取CSV數據,而不必讓客戶擔心它。

這假設您在運行此過程的系統上安裝了Excel。

1

我遇到過這個問題。我在處理這個問題時發現的最好的事情是去codeplex.com並下載Excel.dll。這個DLL將很容易解決這個問題。使用此功能,您可以直接將數據保存到數據集中,然後執行您想要的任何操作。您可以在網站上找到示例代碼。