c# - 我如何从 vsto 插件中以编程方式加载自动化插件 (dll)

标签 c# excel vsto user-defined-functions

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?错误。我不知道该怎么做。任何帮助将不胜感激。

如果我在调用我的按钮单击方法之前首先尝试通过在单元格中手动键入它来调用 Excel 中的 udf,则工作表填充有效并且 udf 会按预期进行评估,但这并不理想。

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

谢谢!

最佳答案

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

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

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

关于c# - 我如何从 vsto 插件中以编程方式加载自动化插件 (dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400020/

相关文章:

excel - Excel 中的多个 IF THEN

php - 如何使用纯 PHP 格式化带有样式、字体、颜色、表格等的 excel 文件?

c# - 是否可以检索Word中所有可用的图表模板

c# - 如何在 VSTO Excel 中获取所有非公式和非空白单元格?

C# 从代码隐藏 (Sitecore) 在页脚中添加外部脚本

c# - 如何使用 Rijndael 在 iOS 中加密 c# 中的解密字符串

c# - 如何将 XML 转换为字典

excel - 数据到位后停止公式运行

c# - 以编程方式从 Microsoft Word 功能区中删除组

c# - 谁应该了解 Asp.Net MVC 中的页面标题?