簡體   English   中英

我如何從vsto插件中以編程方式加載自動化插件(dll)

[英]How do i load an automation addin (dll) programmatically from within a vsto addin

VSTO
VS2008 SP1
.NET 3.5
Excel 2007

我是.net菜鳥。 我正在嘗試從vsto插件的ThisAddIn_Startup()方法中的vsto插件中加載作為Excel應用程序/自動化插件(不是xla或xll的dll)的自動化插件。 從谷歌我得到了下面的解決方案是行不通的。

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{

        Application excel = Globals.ThisAddIn.Application;
        //Also tried without display alerts being set to false
        excel.DisplayAlerts = false;
        foreach (AddIn addin in excel.AddIns)
        {
            if (addin.progID.Equals("MY_ADDIN_PROG_ID"))
            {
                Debug.WriteLine("Addin installed is " + addin.Installed);
                addin.Installed = false;
                Debug.WriteLine("Addin is: " + addin.FullName + ", " + addin.progID);
                Debug.WriteLine("Addin installed is " + addin.Installed);
            }
        }
        AddIn addIn = excel.AddIns.Add("MY_ADDIN_PROG_ID", false);
        addIn.Installed = true;
        excel.DisplayAlerts = true;
        Debug.WriteLine("Addin is: " + addIn.FullName + ", " + addIn.progID);
        Debug.WriteLine("Addin installed is " + addIn.Installed);
        excel.DisplayAlerts = false;
        //OTHER STARTUP CODE
        Debug.WriteLine("Starting up addin!");
}

請注意,我可以看到addin.installed被設置為false並在啟動時恢復為true,但是當我嘗試使用來自插件的udfs填充工作表時,我試圖在以后的button_click方法中加載,得到#NAME嗎? 錯誤。 我沒辦法。 任何幫助將不勝感激。

如果在調用按鈕單擊方法之前先嘗試在單元格中手動鍵入udf來調用excel中的udf,則工作表填充會起作用,並且udfs會按預期進行評估,但這並不理想。

也將已安裝的屬性設置為true似乎沒有任何作用,因為我仍然可以在excel中將udf加載項視為非活動狀態,只有當我將其鍵入到激活的單元格中時才可以。 在我的vsto啟動中,我還需要做些什么來激活自動化插件?

謝謝!

我不確定您是否要在啟動事件中執行此操作。 我做過類似但不太相同的事情,然后才適用。 我在其他事件處理程序中向VBA公開了一些COM可見函數:

protected override object RequestComAddInAutomationService()
{
    // return something com-visible
}

因此,也許您可​​以嘗試以這種方式加載自動化dll? 這是在啟動事件觸發之前發生的... Excel在執行啟動事件時可能正在執行諸如鎖定其加載項列表的操作-誰知道? 如果有可能知道Excel編程將不再那么乏味。

這比在Excel中將VSTO和Automation結合起來似乎要困難得多。 您可能會發現我的博客文章有幫助:

在Excel中的VSTO和UDF之間進行通信

只需將String Value添加到以下注冊表項中,您就可以了。

對於Office 2007

查找regkey, HKEY_CURRENT_USER \\ SOftware \\ Microsoft \\ Office \\ 12.0 \\ Excel \\ Options ,然后創建字符串值,其中name = OPEN ,value = / A“您的ADDIN NAME HERE” (也需要包括引號。)

請注意,對於第一個加載項,值名稱應稱為OPEN ,對於第二個及以后的名稱,請使用OPEN1OPEN2等。

對於Office 2010

只需在上述regkey路徑中將12.0替換 14.0 ,其余的都一樣。

在MSDN上查看下面的文章,這也將對您有很大幫助。

http://support.microsoft.com/kb/291392

看起來這是特定於VSTO的錯誤。 我將加載項轉換為COM加載項,之后便可以使用代碼中的自動化加載項。 我的團隊已將問題發送給Microsoft,因此我們將看看他們怎么說。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM