2011-10-31 58 views
3

我想評估Excel DNA在我的一個excel插件中使用它。我使用C#函數(.NET 4.0)並希望從Excel調用這些函數。我感興趣的原因是,我的插件的用戶是非管理員,因此將是一個突破,如果我可以找到一個解決方案,不要對我的.NET DLL進行重新設計,讓我的插件工作。Excel DNA - 我可以避免一起做一個regasm嗎?

我明白,如果它像一個工作表函數(簡單的返回類型和參數),如:private string Add (int a, double b) 我可以很容易地使用excel dna來包裝它們。此外,我明白,我也可以使用VBA中的Application.Run來調用這些簡單函數。

但是,如果我有一個涉及API的複雜類型,並且想從VBA中使用它,那麼是否需要重新裝配該程序集和類型?例如,如在此:

private MyType AddLogic (myType1 A, myType2 B) 

或者有在Excel中DNA的任何方法,即我還可以消耗在VBA這樣種功能沒有任何regasm或REGSVR32?

感謝 瑪尼

回答

5

您指的是內置在Excel-DNA COM服務器支持。有幾個選項,所有這些選項對沒有管理員權限的用戶都可以正常工作。

  • 您可以在您的AutoOpen在運行時註冊COM類型 - 那麼他們將提供後期綁定從VBA(所以一切都在VBA中調用這些COM類型將是「變」和你沒有智能感知)。
  • 您可以使用.xll作爲COM服務器,使用regsvr32註冊COM類型。 Excel-DNA將其類型註冊到註冊表的HKEY_LOCAL_USER部分,用戶可以隨時寫入該部分。然後,即使沒有加載.xll加載項,使用COM暴露類型的VBA項目也會運行。
  • 要爲COM暴露類型添加類型庫信息,您必須執行regsvr32註冊,該註冊在沒有管理員權限的情況下再次運行,然後在VBA中獲得智能感知等。

因爲本機Excel-DNA .xll調解了.NET類型本身的COM激活,所以在這些情況下,您都不會使用RegAsm--註冊託管程序集以用於運行時激活 - 。

如果您對提供工作表函數,色帶等沒有興趣,那麼您可能不需要Excel-DNA。您可以通過創建一個.reg腳本來註冊.NET程序集,以供VBA中的非管理員使用,該腳本將修正HKEY_LOCAL_USER中的註冊表項而不是HKEY_CLASSES_ROOT。我的意思是說Excel-DNA的非管理員註冊並不是什麼特別的魔法。將此功能集成到Excel-DNA中的主要原因是爲了確保這些對象與Excel-DNA插件的其餘部分在相同的AppDomain中激活,這是棘手的,有時很重要。

+0

謝謝澄清Govert。對我來說,第二個選項聽起來不錯。只是爲了確認,你的意思是說excel dna .xll上的regsvr32不需要管理員權限,因爲它只向HKLU註冊表項。因爲,我知道當你通常在原生dll上運行regsvr32時,它確實需要管理員權限。 –

+0

這是計劃,但當然你也應該測試一下。 – Govert

+0

這個瑪尼怎麼樣?我也遇到類似的情況 – nicolas

相關問題