Excel 使用者定義函數 (UDF) 自動化插件1,附有整合安裝程序,皆以 VB.Net 編寫
完整的 Microsoft Visual Studio 2022 解決方案和專案原始碼。
包含 32 位元和 64 位元 Office/Excel 的安裝程式。
按一下“版本”>“資產”以取得預先建置的範例。
在 VB.Net 中開發的 Excel 使用者定義函數 (UDF) 已存在多年,其早期範例包括 -
http://www.cpearson.com/Excel/CreatingNETFunctionLib.aspx
https://www.codeproject.com/Articles/7753/Create-an-Automation-Add-In-for-Excel-using-NET
雖然這些功能運作良好,但它們的部署可能會出現更多問題,特別是在最終用戶可能不熟悉或不被允許執行命令列實用程式(例如 Regasm)來完成安裝的情況下。
因此,該專案的設計目標是:-
建置解決方案需要安裝有以下軟體的 Windows PC
如果可能,建議在專用開發 PC 上對所有上述元件進行“全新建置”,並套用所有更新。
Visual Studio 應安裝下列項目
以下實用程式對於檢查註冊過程很有用,但不是強制性的。
自動化插件在安裝過程中註冊。
對於 32 位元和 64 位元版本的 Office,需要將不同的值寫入登錄機碼。
安裝程式類別提供這些值,自訂操作屬性是為每個安裝程式項目中所需的版本設定的。
提供了單獨的 32 位元和 64 位元 Office 安裝程式項目,並且應為所需的每個版本建置。
Visual Studio 從每個安裝程式專案產生兩個輸出檔案setup.exe
和AUTO_INSTALLER_nn.msi
這些文件中的任何一個都可以分發給最終用戶並由最終用戶運行,以根據需要進行安裝和卸載。
運行安裝程式後,使用者需要配置 Excel 以啟用自動化插件。
從 Excel > 檔案 > 選項 > 加載項 > 管理 Excel 加載項
點擊自動化,向下捲動並選擇 AUTOMATION.Functions
按一下「確定」確認
提供了兩個範例 Excel 公式
工作表單元格中的=IFX()
傳回文字字串AUTO FX OK
工作表儲存格中的=TIMENOW()
傳回目前時間(以毫秒為單位),例如12:34:56.789
這是一個「易失性」函數,當按下 F9 鍵或另一個儲存格變更時將重新計算。
透過點選公式 > 插入函數並選擇 AUTOMATION.Functions 作為類別,可以列出加載項提供的函數
使用者可以透過右鍵單擊 Windows 開始按鈕並選擇應用程式和功能來卸載加載項
向下捲動至Automation FX並選擇卸載
當開發人員或最終使用者執行安裝程式 .exe 或 .msi 程式時,類別模組Installer.vb
執行所需的組件註冊和登錄更新。
當新的 Installer 類別模組新增至專案時,vb.net 在檔案Installer.Designer.vb
中自動提供標記<System.ComponentModel.RunInstaller(True)>
安裝程式使用此標籤透過專案 AUTO_INSTALLER_32 和 AUTO_INSTALLER_64 中的自訂操作屬性呼叫Public Overrides Sub Install(stateSaver As IDictionary)
。
然後,子Install
呼叫RegisterAssembly
,其功能相當於手動執行RegAsm.exe
2 。
RegAsm.exe
本身使用 RegistrationServices 3公開的方法
應始終遵守以下幾點,以避免在開發和測試期間執行任何衝突的註冊表更新。
在項目 AUTO_FUNCTIONS > Properties 中,任何時候都不應選擇下列選項。
Register for COM Interop
Make assembly COM-Visible
標籤<ComRegisterFunction>
和<ComUnRegisterFunction>
也不應該在任何模組中使用。
在每個項目 > Primary Output Properties 中,Register 應設定為vsdrpDoNotRegister
應開發新的生產版本,以確保所有 GUID 都是唯一的,並且合併所有 Visual Studio 更新、引用和依賴項。
https://support.microsoft.com/en-us/topic/excel-com-add-ins-and-automation-add-ins-91f5ff06-0c9c-b98e-06e9-3657964eec72 ↩
https://learn.microsoft.com/en-us/dotnet/framework/interop/registering-assemblies-with-com ↩
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.registrationservices?view=netframework-4.8.1 ↩