我在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来连接和拆除加载项,我建议尽可能少地使用逻辑.