繁体   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