Excel用户自定义功能与Excel模板有关

时间:2016-06-28 11:40:08

标签: c# vsto

我正在使用基于Excel文档级自定义的产品。项目类型是Visual Studio中的“Excel 2013模板”。

最近我开发了一个用户定义函数,用于评估我们自己的函数。我根据文章https://blogs.msdn.microsoft.com/eric_carter/2004/12/01/writing-user-defined-functions-for-excel-in-net/

开发了用户定义函数

用户定义函数可以与我们产品的Excel模板一起使用,但是在一个测试用例中失败了。

  1. 打开产品的新Excel模板。 [例如:Excel模板1]
  2. 将用户定义的函数添加到单元格。 [成功评估结果]
  3. 打开该产品的另一个Excel模板。 [例如:Excel模板2]
  4. 将用户定义的函数添加到单元格。 [成功评估结果]
  5. 关闭在步骤1中打开的模板。[即:Excel模板1)]
  6. 将用户定义的函数添加到其他模板的单元格[即:Excel模板2]
  7. 现在我注意到添加的功能无法评估,并以“#NAME?”错误结束。

    我已经从Excel的加载项列表中检查了用户定义的函数。它很活跃。 我以任何方式在工作簿的ActivateEvent中以编程方式重新安装了加载项,但没有用。

    只有在我关闭首先打开的模板时才会出现此问题。 此外,这个问题不适用于保存的工作簿。

    当我调试时,我发现了一个问题。 在我们的产品中,当我们的自定义打开时,我们将自己的一组命令栏添加到Excel的上下文菜单中。 下面的示例代码将命令栏按钮添加到单元格的上下文菜单中。

     try
     {
        commandBars = (Office.CommandBars)Application.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, Application, new object[] { });
        commandBarSheetMenu = commandBars["Cell"];                
     }
     catch (Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
     commandBarButtonTest = (Office.CommandBarButton)commandBarSheetMenu.Controls.Add(1, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     commandBarButtonTest.BeginGroup = true;
     commandBarButtonTest.Caption = "Test Me";
     commandBarButtonTest.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonSheetCopy_Click);
    

    当我删除/评论上述代码时,即使我关闭了第一个打开的模板,用户定义函数也会开始工作。

    与命令栏一起使用时,Excel模板和用户定义函数是否存在已知问题?

    如果有人可以就此问题发表评论并建议解决此问题,那就太棒了。

1 个答案:

答案 0 :(得分:0)

即使没有命令栏,我也可以重新创建这个问题。 上述测试用例存在同样的问题,如果我以编程方式将用户定义函数设置为任何excel单元格。

通过遵循上述测试用例,我创建了两个可用于重新创建问题的演示解决方案。 这些演示解决方案

  1. 通过按下按钮以编程方式将用户定义函数设置为选定的单元格。
  2. 使用自定义命令栏的工作簿模板自定义
  3. Y 您可以从 https://1drv.ms/u/s!AKQQ5XmOgV6CgQE

    下载源文件

    我已将这些解决方案中的自述文件文件分别包含在重新创建问题的说明和步骤中。

    如果这个领域的一些专家可以帮我解决这个问题,那就太棒了