我有使用OpenXML庫導出數據的代碼。什麼是從C#導出大量數據到excel的最佳/最快方式
我有20,000行22列,它需要時間(大約10分鐘)。
是否有任何解決方案,將數據從C#導出到Excel,這將更快,因爲我從一個asp.net mvc應用程序這樣做,許多人瀏覽器超時。
我有使用OpenXML庫導出數據的代碼。什麼是從C#導出大量數據到excel的最佳/最快方式
我有20,000行22列,它需要時間(大約10分鐘)。
是否有任何解決方案,將數據從C#導出到Excel,這將更快,因爲我從一個asp.net mvc應用程序這樣做,許多人瀏覽器超時。
我清盤使用名爲ClosedXML一個開源的解決方案,工作非常
根據您要定位的Excel版本,您可以將數據公開爲OData服務,該服務可以自然使用Excel 2010,並將處理您的下載和格式設置。
我的目標是2003年和2007年的Excel – leora
我假設這些數據是需要完全發送給客戶端的,並且已經以某種方式預過濾了,但仍然需要發回給提出請求的人。
在這種情況下,您想要'異步'執行此特定操作。我不確定這是否適合您的工作流程,但是說一個人請求這個大型的XML格式的文檔,我會:a)排隊另一個工作線程來啓動文檔的生成,同時返回一個'標記'(可能是GUID給請求者); b)返回一個鏈接到一個頁面,請求者可以點擊鏈接(傳遞令牌),讓頁面查找結果。
如果線程已完成文檔處理,則將其放入具有唯一名稱的特殊文件夾中,並將該標記添加到具有文檔位置的數據庫表中。如果該人請求該頁面,該令牌存在於數據庫中,並且該文檔存在於文件系統上,則它們可以通過HTTP進行點擊和下載。如果它不存在,他們會被告知不存在或等待結果。 (該消息可以基於接收到請求的時間。)
如果此人成功下載文檔(並且您可以通過腳本執行此操作),則可以使用該令牌刪除文檔數據庫條目並從文件系統中刪除該文件。
我希望我能正確地閱讀這個問題。
我發現通過限制導出操作的次數,我可以加快從數據庫導出數據到Excel電子表格的速度。我發現通過在寫入之前積累100行數據,創建速度至少增加5-10倍。出口最經常當導出數據是在工作流完成數據時
的錯誤
這工作流程會導致開銷,因爲構建XML DOM需要時間,將XML DOM與模型一起保存在內存中,然後將大量數據寫入文件。
更好的處理方法是將模型條目直接轉換爲目標格式並直接寫入(緩衝)文件。
開銷很小,寫入速度快,可以被Excel讀取的格式是CSV(好,它是遺留的,很尷尬......)。
CSV。這是一個純文本文件,但可以通過任何版本的Excel打開。
毫無疑問,將數據導出到excel是一種更簡單的方法。很多網站提供數據導出爲CSV。
你需要做的只是添加一個逗號(,)來分隔值和換行符來分隔記錄。它不會花費額外的資源來構建csv文件,因此速度非常快。
假設每行大約有100個字節的20,000行和22列,單獨產生41兆字節的數據。加上xml標籤,再加上格式化,我會說你最終會壓縮(.xlsx只是幾個壓縮的xml文件)100MB的數據。
當然這需要一段時間,取數據也是如此。 我建議您使用excel包而不是Office OpenXML開發工具包。 http://epplus.codeplex.com/
在快速寫入和希望這不是微軟的代碼中可能存在一個缺陷/性能問題。
你可能就要有產卵關閉一個新的線程,並有運行過程。即使你現在加快速度,如果它增長到10萬列呢?例如:new Thread(()=> {// do work})。 (.Net 4) –
@帕特里克·皮特雷 - 這將如何減少花費時間? – leora
這是格式化數據還是可以使用逗號分隔值文件?我會假設你的減速是在創建一個大的XML集,而不是本身的數據量。 – Tommy