2014-01-16 23 views
0

我在Excel中創建並加載數據的excel插件項目中,我一直在嘗試優化加載127,000行數據,這需要花費一分30秒的時間將127 k行寫入Excel表單。我已經嘗試了幾種寫入excel工作表的方法,例如創建一個範圍和一個數組塊,並將該數組塊設置爲範圍,這種方式非常慢,我可以通過使用帶有數據表的ListObject SetDataBinding來獲取某個時間保存數據。從excel功能區渲染大量數據c#

listObject.ListObject.AutoSetDataBoundColumnHeaders = true; 
listObject.ListObject.SetDataBinding(data); 
listObject.ListObject.Disconnect(); 

這個過程更快,但仍然需要1和30寫入屏幕。還有其他的選擇可以縮短時間嗎?我發現在一個沒有絲帶的項目中,速度非常快。

回答

0

Excel加載項鎖定UI並在工作時顯示進度條並不罕見。

這就是說,我在這篇文章Replace This While Loop with More Efficient Code?中描述的屬性的Interop版本。我所描述的方法有兩種最簡單的方法來加速與Excel數據表的交互。鏈接到互操作版本的VBA屬性可以在這裏找到:MSDN:_Application.ScreenUpdating和這裏:MSDN:_Application.Calculation

Excel在後臺執行大量操作以確保數據儘可能最新。以用戶的步伐做事情時,這很有效,用戶界面響應迅速,公式總是顯示正確的數據。當您開始與腳本或代碼進行交互時(比用戶要快得多),需要大量資源來保持數據表的最新狀態,因此所有操作都需要更長的時間。

要考慮的另一件事是,哪部分操作需要很長時間。它是從外部來源檢索數據嗎?它是否將數據寫入Excel?它在數據源和Excel之間進行某種翻譯操作嗎?如果我上面提到的解決方案運作良好,太棒了!如果不是,你需要做更多的調查,看看你的數據源是否提供的數據太慢,或者你正在做大量的數據翻譯操作,這讓事情陷入困境。在使用Excel這樣的工具時,有10倍,其中ScreenUpdatingCalculation會減慢速度,其他10%可能難以確定。

+0

calcualtion設置爲manual並且screenupdating設置爲false。我將數據綁定到列表對象,看起來我不能縮短時間。我運行了一個不使用功能區的演示項目,並且執行相同工作的速度顯着加快。你知道爲什麼絲帶/添加是這樣的,以及如何消除它。謝謝 – AC25