重新打开电子表格时,Excel按钮事件不会触发

时间:2012-08-23 03:35:44

标签: c# excel event-handling vsto

当我向电子表格添加按钮或链接时,点击事件有效。但是,当我保存电子表格时,关闭它并重新打开它,事件不会触发。

AddControl(xlApp, ((TaskPaneView)this.Parent).factory, "text", "A1");

public void AddControl(Microsoft.Office.Interop.Excel.Application xlApp, Microsoft.Office.Tools.Excel.ApplicationFactory factory, string controlText, string address)
{
    Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet = xlApp.ActiveWorkbook.ActiveSheet;
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = factory.GetVstoObject(nativeWorksheet);
    var btn = new Microsoft.Office.Tools.Excel.Controls.Button();
    btn.Name = "link1";
    btn.Text = controlText;
    btn.Click += new EventHandler(btn_Click);
    vstoWorksheet.Controls.AddControl(btn, nativeWorksheet.Range[address], controlText);
}

void btn_Click(object sender, EventArgs e)
{

}

打开WorkBook时是否有一种简单的方法可以再次连接事件?

我想我必须手动搜索工作簿中的按钮和AddHandler。

修改:这是记录在案的,但在关闭电子表格后没有提及问题:Adding Controls to a Worksheet at Run Time in an Application-Level Project

1 个答案:

答案 0 :(得分:1)

enter image description here

When a document is saved and then closed, all dynamic host controls are removed from the document. Only the underlying native Office objects remain behind.


我现在可能会采取另一种方式,使用代码创建VBA按钮以进入Add-In functionality

VBA代码:

Dim oAddin As COMAddIn
Dim oCOMFuncs As Object
Set oAddin = Application.COMAddIns(ExcelAddInNameSpace")
Set oCOMFuncs = oAddin.Object
oCOMFuncs.CallAFunctionOfAddIn

或者使用上下文菜单的另一种方式(当超过NamedRanges时)。


来自MSFT的更多信息:

  

但问题出现了:如果您保存工作簿,请将其打开   无论是装有插件的机器还是装有清洁机器的机器   按钮这次不起作用!

     

因此我们可以看到通过加载项将控件添加到文档的表面   没有多大意义,因为控制可能会失去它   功能。这就是我们通常建议使用自定义任务的原因   窗格而不是将控件添加到文档的表面。看一看   在以下文件中:

http://msdn.microsoft.com/en-us/library/aa942864.aspx

http://msdn.microsoft.com/en-us/library/aa338197(v=office.12).aspx