自O(shè)ffice 2010版本開始有了32位和64位之分,對Excel來說,32位的Excel和64位的Excel在性能上的主要區(qū)別是64位的Excel能夠處理2G及2G以上的大數(shù)據(jù)集。 隨著64位操作系統(tǒng)的安裝,Office 2010及以上版本的普及以及計算機的內(nèi)存容量越來越高,使用64位Excel的用戶越來越多,所以讓插件支持64位Excel能夠贏得一部分用戶。前面十篇文章中所講解的技術(shù)適用于不同版本和不同位數(shù)的Excel,但是由于32位的COM組件不支持64位的Excel,所以在針對不同位數(shù)的Excel的編譯和部署的時候,有些地方可能需要注意和有所不同。 64位版本的Office只能安裝在64位的操作系統(tǒng)之上,32位的Office采用Windows-32-on-Windows-64 (WOW64) 技術(shù)可以安裝在64位操作系統(tǒng)上,這也是32位Office在64位操作系統(tǒng)上的默認(rèn)安裝方式,同時基于32位的Office插件也可以運行在安裝在64位操作系統(tǒng)上的32位的Office。WOW64 使用x86的模擬器能夠使得基于32位Windows的應(yīng)用程序可以無縫的運行在64位的操作系統(tǒng)上。 本文首先講解如何檢測用戶機器上Excel的版本,然后介紹Shared Add-ins插件編譯的時候針對不同版本的注意事項,最后介紹部署的時候需要注意的問題。 一 如何判斷用戶Excel的位數(shù)在Excel 2010中開始菜單->幫助中有Excel的版本信息: 在Excel 2013中開始菜單->帳戶->關(guān)于Excel下點開之后也有版本信息: 以上是直接查看Excel的版本,當(dāng)在客戶機器上通過代碼部署插件的時候,可能需要通過注冊表信息來診斷用戶當(dāng)前安裝的Excel版本。 如果安裝了64位版本的Office,那么可以通過Outlook的注冊表節(jié)點下的名為Bitness的類型為REG_SZ的注冊表項的值來判斷版本信息,該值有x86和x64,說明了版本信息,不管用戶安裝與否Outlook,均有該節(jié)點,一般的我們查找對應(yīng)Office版本的位數(shù)信息(11-Office2003,12-Office2007, 14-Office2010, 15-Office2013)。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook
通過代碼讀取注冊表該項下的改注冊表的值即可判斷Office的版本。 二 為64位Office編譯程序集如果采用Shared Add-ins技術(shù)來為Excel開發(fā)插件,程序集實際上是編譯為了COM組件。默認(rèn)情況下,我們的編譯目標(biāo)設(shè)置為了Any CPU,但是對于要注冊為Com組件的程序來說,Any CPU并不能支持64位的Excel,所以我們需要明確指定為x64。所有用到COM組件的,如UDF函數(shù)庫,RTD函數(shù),TCP的應(yīng)用程序集都需要編譯為x64并且注冊為COM組件。 在淺談Excel開發(fā):八 Excel 項目的安裝部署 這篇文章中已經(jīng)說過,當(dāng)勾選了注冊為COM組件的時候,Visual Studio實際上是在生成完了dll之后幫我們調(diào)用了regasm來注冊改dll為Com組件(如果是采用C++或者其他非托管編程語言編寫的dll,則需要使用regsver32 這個應(yīng)用程序來注冊) regasm "D:/YYUDF/YYAddIn/YYSharedAddin/bin/Debug/YYSharedAddin.dll" /codebase /s regasm和regsver32都有對應(yīng)的32位和64位版本,在最新的Visual Studio 2013中,軟件會幫我們自己選擇正確的版本,但是在之前的版本中,如果您選擇編譯為x64并且注冊為COM組件,編譯的時候可能會出現(xiàn)如下 “xxx.dll不是有效的應(yīng)用程序集”的錯誤: 這是由于Visual Studio沒有為我們選擇正確的注冊工具regasm或者regsver32的版本。可以在項目的編譯屬性->Build Events->的Post-build event command line中輸入如下: "%Windir%\Microsoft.NET\Framework64\v2.0.50727\regasm" "$(TargetPath)" 該命令指定了使用64位的regasm來注冊我們編譯好的dll。 同樣,如果您使用的是非托管語言編譯的dll,那么regsver32也需要指定為正確的版本,方法同上。 三 64位Excel插件的部署在部署插件的時候,我們應(yīng)該預(yù)先分別為32位和64位分別是使用x86和x64編譯兩套dll,以及打包32位和64位的regasm(如果使用非托管語言則是regsver32),然后在客戶機器上部署的時候,首先判斷用戶安裝的Excel版本,然后在分別使用對應(yīng)版本的注冊COM組件工具regasm來注冊對應(yīng)版本的dll。 四 結(jié)論本文講述了32位和64位Excel的差別,以及如何檢測用戶機器上Excel的版本,然后介紹Shared Add-ins插件編譯的時候針對不同版本的注意事項,最后介紹部署的時候需要注意的問題,來了解這些之后,我們寫出來的插件就可以針對各種位數(shù)的Excel插件了。希望本文對您處理不同位數(shù)的COM組件注冊一些Excel 64位插件的安裝部署有所幫助。 |
|