2

VSTO
VS2008 SP1
.NET 3.5
Excel 2007

我是一个 .net 菜鸟。我正在尝试从 vsto 插件的 ThisAddIn_Startup() 方法中的 vsto 插件中加载一个自动化插件,它是一个 excel 应用程序/自动化插件(它是一个 dll 不是 xla 或 xll)。从谷歌我得到了以下不起作用的解决方案。

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 来调用 udf,则工作表填充工作并且 udf 会按预期进行评估,但这并不理想。

此外,将 installed 属性设置为 true 似乎没有做任何事情,因为我仍然可以看到 udf 插件在 excel 中处于非活动状态,只有当我将它输入到单元格中时它才会被激活。我还需要做些什么来激活我的 vsto 启动中的自动化插件吗?

谢谢!

4

4 回答 4

0

我不确定您是否想在启动事件中执行此操作。我之前做过类似但不完全相同的事情,这可能适用。我在不同的事件处理程序中向 VBA 公开了一些 COM 可见函数:

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

那么也许您可以尝试以这种方式加载您的自动化 dll?这发生在启动事件触发之前...... Excel 可能会在处理启动事件时锁定其插件列表 - 谁知道?如果有可能知道 Excel 编程就不会那么乏味了。

于 2012-05-01T16:46:29.853 回答
0

在 Excel 中结合 VSTO 和自动化似乎比看起来更难。您可能会发现我的博客文章很有帮助:

Excel 中 VSTO 和 UDF 之间的通信

于 2012-05-01T16:52:13.390 回答
0

只需将字符串值添加到以下注册表项即可。

对于 Office 2007

找到 regkey, HKEY_CURRENT_USER\SOftware\Microsoft\Office\12.0\Excel\Options,然后创建字符串值,其中 name = OPEN , value = /A "YOUR ADDIN NAME HERE"(还需要包含引号。)

请注意,对于第一个插件,值名称应称为OPEN,对于第二个及以后的插件,请使用OPEN1OPEN2等。

对于 Office 2010

只需将上述regkey路径中的12.0替换为14.0即可,其余都一样。

查看 MSDN 上的以下文章,这也将对您有很大帮助。

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

于 2012-06-19T03:44:20.207 回答
0

看起来这是 VSTO 特有的错误。我将我的插件转换为 COM 插件,之后就可以使用代码中的自动化插件了。我的团队已将此问题发送给 microsoft,因此我们将看看他们怎么说。

于 2012-07-25T14:02:31.007 回答