程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 針對64位Excel的插件的開發和部署

針對64位Excel的插件的開發和部署

編輯:關於.NET

自Office 2010版本開始有了32位和64位之分,對Excel來說,32位的Excel和64位的Excel在性能上的主要區別是64位的Excel能夠處理2G及2G以上的大數據集。

隨著64位操作系統的安裝,Office 2010及以上版本的普及以及計算機的內存容量越來越高,使用64位Excel的用戶越來越多,所以讓插件支持64位Excel能夠贏得一部分用戶。前面十篇文章中所講解的技術適用於不同版本和不同位數的Excel,但是由於32位的COM組件不支持64位的Excel,所以在針對不同位數的Excel的編譯和部署的時候,有些地方可能需要注意和有所不同。

64位版本的Office只能安裝在64位的操作系統之上,32位的Office采用Windows-32-on-Windows-64 (WOW64) 技術可以安裝在64位操作系統上,這也是32位Office在64位操作系統上的默認安裝方式,同時基於32位的Office插件也可以運行在安裝在64位操作系統上的32位的Office。WOW64 使用x86的模擬器能夠使得基於32位Windows的應用程序可以無縫的運行在64位的操作系統上。

本文首先講解如何檢測用戶機器上Excel的版本,然後介紹Shared Add-ins插件編譯的時候針對不同版本的注意事項,最後介紹部署的時候需要注意的問題。

一 如何判斷用戶Excel的位數

在Excel 2010中開始菜單->幫助中有Excel的版本信息:

在Excel 2013中開始菜單->帳戶->關於Excel下點開之後也有版本信息:

以上是直接查看Excel的版本,當在客戶機器上通過代碼部署插件的時候,可能需要通過注冊表信息來診斷用戶當前安裝的Excel版本。

如果安裝了64位版本的Office,那麼可以通過Outlook的注冊表節點下的名為Bitness的類型為REG_SZ的注冊表項的值來判斷版本信息,該值有x86和x64,說明了版本信息,不管用戶安裝與否Outlook,均有該節點,一般的我們查找對應Office版本的位數信息(11-Office2003,12-Office2007, 14-Office2010, 15-Office2013)。

注冊表項位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook

注冊表鍵: Bitness

注冊表值: x86 或者x64

通過代碼讀取注冊表該項下的改注冊表的值即可判斷Office的版本。

二 為64位Office編譯程序集

如果采用Shared Add-ins技術來為Excel開發插件,程序集實際上是編譯為了COM組件。默認情況下,我們的編譯目標設置為了Any CPU,但是對於要注冊為Com組件的程序來說,Any CPU並不能支持64位的Excel,所以我們需要明確指定為x64。所有用到COM組件的,如UDF函數庫,RTD函數,TCP的應用程序集都需要編譯為x64並且注冊為COM組件。

在淺談Excel開發:八 Excel 項目的安裝部署 這篇文章中已經說過,當勾選了注冊為COM組件的時候,Visual Studio實際上是在生成完了dll之後幫我們調用了regasm來注冊改dll為Com組件(如果是采用C++或者其他非托管編程語言編寫的dll,則需要使用regsver32 這個應用程序來注冊)

regasm "D:/YYUDF/YYAddIn/YYSharedAddin/bin/Debug/YYSharedAddin.dll" /codebase /s

regasm和regsver32都有對應的32位和64位版本,在最新的Visual Studio 2013中,軟件會幫我們自己選擇正確的版本,但是在之前的版本中,如果您選擇編譯為x64並且注冊為COM組件,編譯的時候可能會出現如下 “xxx.dll不是有效的應用程序集”的錯誤:

本欄目

這是由於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插件的部署

在部署插件的時候,我們應該預先分別為32位和64位分別是使用x86和x64編譯兩套dll,以及打包32位和64位的regasm(如果使用非托管語言則是regsver32),然後在客戶機器上部署的時候,首先判斷用戶安裝的Excel版本,然後在分別使用對應版本的注冊COM組件工具regasm來注冊對應版本的dll。

四 結論

本文講述了32位和64位Excel的差別,以及如何檢測用戶機器上Excel的版本,然後介紹Shared Add-ins插件編譯的時候針對不同版本的注意事項,最後介紹部署的時候需要注意的問題,來了解這些之後,我們寫出來的插件就可以針對各種位數的Excel插件了。希望本文對您處理不同位數的COM組件注冊一些Excel 64位插件的安裝部署有所幫助。

作者:   yangecnu(yangecnu's Blog on 博客園)

出處:http://www.cnblogs.com/yangecnu/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved