[VB.NET]OFFICE 2003升級到OFFICE 2010的怪問題~變的非常慢
前陣子客戶將OFFICE 2003升級到OFFICE 2010後,我們的.NET 1.1 Windows Form程式在使用Excel物件時,居然變的非常的慢!
原本以為是因為程式中有使用某些Excel的VBA指令有問題所導致,後來Trace發現,在建立Excel Application物件時,就要花上20幾秒! Code如下,
Dim excelApp as Object = CreateObject("Excel.Application")
後來寫一支vbs來測試直接建立Excel Application又很快。
想不透,之間有想過,使用Shell建立Excel後,再取得它的控制權,但時間點又不是那麼的好處理。
Dim xL As Process = Process.Start("excel")
System.Threading.Thread.Sleep(500)
Dim excelApp = Marshal.GetActiveObject("Excel.Application")
最後只好用Early Binding的方式(我們的開發環境是Office 2003)加入Office的參考試看看。
Dim excelApp As Application = New ApplicationClass
本來怕無法在Office 2010的環境上執行,結果居然是可以的(原本以為會掛掉的說)! 而且建立物件的速度很快!
看了一下組件參考的版本是11.0(Microsoft.Office.Interop.Excel, Version=11.0.0.0),
而客戶的版本是Office Pro Plus 2010 version 14.0.6129.5000 (32 bit)。
不過,目前運作起來算是正常了!
另外,
1.在VS2010中,加入Office參考,有個屬性「Embed Interop Types」預設是true,就不會把Office的版本號加入到組件的參考之中。
就不用擔心程式引用的Office版本會跟環境的Office版本有不符合的問題吧!
2.蠻奇怪的是,Window Form程式透過CreateObject 建立Excel.Application時,工作管理員中的msiexec.exe的cpu會彪高,不知為何會如此。
如果有任何想法,請跟我分享一下哦! 謝謝!
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^