1

当我向电子表格添加按钮或链接时,单击事件会起作用。但是,当我保存电子表格时,将其关闭并重新打开,事件不会触发。

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。

编辑:这已记录在案,但关闭电子表格后没有提及问题:在应用程序级项目的运行时将控件添加到工作表

4

1 回答 1

1

在此处输入图像描述

当一个文档被保存然后关闭时,所有的动态宿主控件都会从文档中移除。只有底层的本机 Office 对象留在后面。.


我现在可能会用另一种方式,使用代码创建 VBA 按钮以利用加载项功能

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

于 2012-08-23T03:55:08.953 回答