如何访问ThisAddin.cs文件中的方法

krr*_*hna 4 c# excel vsto

我在C#中创建了一个Excel Addin项目.现在解决方案包含一个文件ThisAddin.cs,它有一个ThisAddin类.后来我在同一个解决方案中添加了一个名为Form的项目.在Form中,当我单击一个按钮时,对于该按钮单击事件,我想调用ThisAddin.cs文件中的方法.

namespace ExcelAddIn
{
    public partial class ThisAddIn
    {
        public void RefreshExcelData()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在MyForm.cs中,在尝试为ThisAddin类创建一个对象时,有一个编译错误,即Thisaddin类没有一个带0参数的构造函数.

private void btnUploadTestCases_Click(object sender, EventArgs e)
{
    ThisAddIn objrefresh = new ThisAddin();
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Mat*_*ias 10

你正在从错误的方向接近问题.当您单击该按钮时,您不想创建新的加载项,您真正想要的是访问由Excel启动时由VSTO为您创建的加载项实例,该实例可通过以下方式访问Globals.ThisAddIn.

将表单中的代码更改为以下内容:

private void btnUploadTestCases_Click(object sender, EventArgs e)
{
    var addIn = Globals.ThisAddIn;
    addIn.RefreshExcelData();           
}
Run Code Online (Sandbox Code Playgroud)

......它应该有魅力.

话虽如此,有一个很好的理由让这个方法成为ThisAddIn吗?通常,当Excel启动/关闭时,应该使用ThisAddIn来连接和拆除加载项,我建议尽可能少地使用逻辑.