將Dotnet VSTO Excel加載項中的某些功能公開到VBA而不需要用戶成爲本地管理員的最佳方式是什麼(即,沒有COM註冊,no HttpListener )?是否可以使用VBA中的Microsoft Message Queues?將VSTO功能公開到VBA而不是本地管理員
回答
如果我可以將您的問題解釋爲「如何在沒有COM註冊的情況下將.Net程序集中的功能展示給Excel」,那麼優秀的解決方案就是使用Excel的XLL界面。 基本上一個部署一個xll墊片和一個關聯的.net dll。當xll被加載時,它反映了dll並將其中的函數暴露給Excel。
一個開源實現可以在這裏找到http://exceldna.typepad.com/blog/2006/01/introducing_exc.html
商業,封閉源代碼,但在這裏 http://www.managedxll.com/
功能更豐富一個你不能簡單的實例化它們爲COM對象,VSTO不會在默認應用程序域中運行。
以下是我如何做到的,這無疑是有點複雜的。這是將VSTO工作簿另存爲XLA文件,這在某些方面比純VSTO加載項更爲靈活。
您需要使用regasm.exe生成一個類型庫,該庫將被VBA代碼引用。
在.NET對象模型中創建一個根工廠類,該工廠類能夠實例化任何想在VBA中使用的類(類似於Office對象模型中的「應用程序」類)。
然後您需要找到一種方法將對此工廠類實例的引用傳遞給VBA。一旦VBA引用了這個工廠類的實例,它就可以調用它的方法來實例化.NET對象模型中的任何其他對象。
要通過一個實例來VBA,在VBA代碼中定義一個宏如下
示例代碼:
Private m_objMyFactory As Object
Public Sub RegisterFactory(MyFactory As Object)
On Error GoTo ErrHandler
Set m_objMyFactory = MyFactory
Exit Sub
ErrHandler:
MsgBox "An unexpected error occurred when registering the Factory component: " & Err.Description
Exit Sub
End Sub
- 現在代碼添加到VSTO ThisWorkbook_Open事件處理程序,它實例化你的工廠對象,並調用上面的宏來傳遞對工廠對象的引用。
示例代碼:
void ThisWorkbook_Open()
{
try
{
ThisApplication.Run("RegisterFactory",
new MyNamespace.MyFactory(),
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
catch (Exception ex)
{
MessageBox.Show("Load error: " + ex.ToString());
}
}
,需要考慮到得到一些更多的問題這個強勁的工作 - 如果你感興趣下面瞭解這件事讓我知道,我會發布更多的細節。
您可能感興趣的Excel4Net(它類似於ExcelDNA和ManagedXll,但更容易使用):
只是爲了供將來參考讀者:您可能還想看看這個問題:
Accessing a VSTO application-addin types from VBA (Excel)
,特別,到被引用那裏的博客:
VSTO Add-ins, COMAddIns and RequestComAddInAutomationService
通過覆蓋RequestComAddInAutomationService()可以公開任何你想要的功能,通過定義一個門面類,爲提供入口點所有這些功能,並將該類暴露給VBA。
- 1. 管理IIS而不是本地管理員在iis 5.1中
- 2. 將組添加到本地管理員
- 3. 如何使用IPC而不是本地管理員?
- 4. Django管理員表功能
- 5. Joomla 3本地管理員重定向到管理員面板
- 6. 爲什麼要宣佈成員公開而不是公開?
- 7. 翻譯是不是一個功能管理員休息測試
- 8. 窗體而不是長管理員?
- 9. WMI管理範圍連接到本地而不是遠程
- 10. 在本地運行web服務器而不公開公開?
- 11. 需要什麼權限才能管理IIS而不是'管理員'?
- 12. 管理員視圖是否也必須具有該應用的公共功能?
- 13. 本地管理員組中的SharePoint場管理員帳戶
- 14. 將域機器用戶添加到本地管理員
- 15. 僅添加管理員功能?
- 16. WordPress的管理員 - 功能未定義?
- 17. 搜索轉到管理員/產品,而不是產品頁面?
- 18. Django管理員不能排序功能列
- 19. 辦公室開發人員工具不會安裝VSTO未找到
- 20. 管理員腳本將不會重新啓動管理員重新啓動
- 21. 我不能作爲開發人員或管理員添加到應用頁面
- 22. Powershell檢查本地管理員憑證
- 23. 管理員爲我的本地論壇
- 24. 使用UserPrincipal檢查本地管理員
- 25. 將公式處理值作爲文本,而不是數字
- 26. 儘管是管理員,訪問被拒絕到本地主機 - PowerShell
- 27. WordPress的管理員在本地開發環境中無響應
- 28. WordPress的管理員突然不是管理員
- 29. WSS 3.0功能 - 檢查用戶是否爲農場管理員
- 30. 導入功能而不是開始或腳本?