【问题标题】:Excel User Defined Function issues with Excel TemplateExcel 模板的 Excel 用户定义函数问题
【发布时间】:2016-06-28 11:40:08
【问题描述】:

我正在使用基于 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]

现在我可以注意到添加的函数不会被评估并以“#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 模板和用户定义函数与命令栏一起使用时是否存在已知问题?

如果有人可以对此问题发表评论并提出解决方案,那就太好了。

【问题讨论】:

标签: c# vsto


【解决方案1】:

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

按照上面的测试用例,我创建了两个可用于重现问题的演示解决方案。 这些演示解决方案是

  1. 通过按按钮以编程方式将用户定义函数设置为选定的单元格。
  2. 使用自定义命令栏自定义工作簿模板

可以从https://1drv.ms/u/s!AKQQ5XmOgV6CgQE下载源文件

我已将 Readme 文件单独包含在这些解决方案中,其中包含重新创建问题的说明和步骤。

如果这方面的专家能给我一个解决这个问题的解决方案,那就太好了

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 2015-08-12
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多