【问题标题】:Exception when accessing Globals.ThisAddIn.Application in VSTO AddIn在 VSTO 插件中访问 Globals.ThisAddIn.Application 时出现异常
【发布时间】:2020-01-19 01:18:13
【问题描述】:

我正在尝试使用 C# 创建一个 MS Office VSTO 插件。 AddIn 包含我通过 VS19 中的 Ribbon-Designer 添加的功能区。

我没有修改 ThisAddin.cs 文件:

namespace MyAddIn
{
    public partial class ThisAddIn
    {

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

        }

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

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

在功能区中,我添加了一个按钮并编写了一些单击时要执行的代码:

namespace MyAddIn
{
    public partial class my_ribbon
    {
        private void my_ribbon_Load(object sender, RibbonUIEventArgs e)
        {

        }

        private void btn_myButton_Click(object sender, RibbonControlEventArgs e)
        {
            MessageBox.Show(Globals.ThisAddIn.Application.ThisWorkbook.FullName);
        }
    }
}

但是,每当我单击按钮时,C# 都会抛出以下异常:

System.Runtime.InteropServices.COMException
  HResult=0x800A03EC
  Message=Ausnahme von HRESULT: 0x800A03EC
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

我在调试时看到Globals.ThisWorkbook.Application 抛出了错误。 我发现0x800A03EC 是 Name-Not-Found 的错误代码(根据this)。 但是当我在打开文件后单击按钮时,应该有一个应用程序对象以及一个全名。

我还查看了this guide,但这并没有太大帮助,因为他们也使用了Globals.ThisWorkbook.Application,但成功了。

您对如何解决此问题有任何建议吗? (需要更多初始化代码等吗?)

【问题讨论】:

  • 你在任何地方定义Application.ThisWorkbook吗? ThisWorkbook 看起来像是 document-level 自定义的代码,而不是应用程序级别的插件。如果你替换Globals.ThisAddIn.Application.Workbook[1].FullName;,你会得到不同的结果吗?
  • @CindyMeister 我有一个关于Ribbon XML 控制的帖子here。我看到您对here 类似帖子的回复,但无法为Ribbon XML 案例实施它。我想知道您是否有时间评论/提出解决方案。

标签: c# vsto excel-addins


【解决方案1】:

@Cindy Meister 为我指明了正确的方向:

我实际上是在编写应用程序级插件而不是文档级自定义,因此没有ThisWorkbook。我需要查看的是Globals.ThisAddIn.Application.ActiveWorkbook(即调用单击的工作簿实例)。

ActiveWorkbook 替换ThisWorkbook 就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多