【问题标题】:Create new Excel Function (User Defined Function) using C#使用 C# 创建新的 Excel 函数(用户定义函数)
【发布时间】:2018-09-16 04:34:08
【问题描述】:

我想创建一个新的 Excel 函数(用户定义函数),为此我执行了与此链接中相同的步骤:https://excel-dna.net/

  1. 我创建了一个类库项目

  2. 我安装了 ExcelDna.Integration 包

  3. 我创建了一个方法sayHello

但是当我尝试从 excel 中的单元格调用我的函数时(我输入 =sayHello("World"),该函数没有出现,似乎它没有添加到 excel 函数中。 是否缺少一些步骤?我怎样才能让我的功能看起来可以使用它?

【问题讨论】:

  • 似乎需要做很多工作才能在 Excel 中添加 UDF。你不能只用VBA写吗?或者如果 C# 是您的首选语言,请创建一个 dll 并在您的 excel 项目中引用它
  • @Zac 虽然使用 VBA 制作 UDF 更快,但如果您想在 Visual Studio 中使用 C# 或现代 VB.NET 编写代码,然后使用 .NET 库等,您需要一点像 Excel-DNA 这样的胶水将 .NET 运行时绑定到 Excel。将 C# .dll 直接引用到 Excel 是非常严格的,会导致各种问题。
  • 我从来没有使用过外部插件,所以可能是我缺乏这方面的知识。在这背后,我会看看它,也许我需要学习一些新的东西......谢谢

标签: c# excel user-defined-functions excel-dna


【解决方案1】:

您应该安装包 "ExcelDna.AddIn" 来制作插件(这将设置插件,包括重要的 .dna 文件,并引入 “ExcelDna.Integration” 参考库)。

所以步骤是:

  • 创建一个新的 C# 类库项目(面向 .NET Framework 而非 .NET Standard)
  • 安装ExcelDna.AddIn
  • 添加一些代码,例如

public static class MyFunctions { public static string SayHello(string name) { return "Hello " + name; } }

  • 按 F5 在 Excel 中编译和加载加载项

(请注意,在某些 Excel 安装中,项目的调试设置会在可执行路径中获得额外的 %1 - 如果在调试时遇到错误,只需从末尾删除)

对 Excel-DNA 的最佳支持是 Google 小组https://groups.google.com/forum/#!forum/exceldna

【讨论】:

  • 非常感谢,我找到了这个教程:youtube.com/watch?v=kkihL6vP_tI,太棒了,一切正常,这是一个显示消息的简单示例,现在我希望我的函数从数据库中提取数据,我创建了一个方法来做到这一点,但这次我的功能没有出现,我找不到问题,我的查询没问题
  • @GtariAbir 可能是你的函数不是静态的,或者参数类型不支持。如果您仍然遇到问题,请写信给 Google 群组。
  • 我的函数是静态的,但当我将其定义为公共时它不是公共的,我收到此错误“不一致的可访问性:返回类型 List 比方法 'Class1.GetAbsPrice (DateTime) 更难访问”请问如何将其声明为公开而不会出现此错误?
  • 哦,当我将 AbsProduct 定义为公共时,我的类 AbsProduct 没有被声明为公共,问题已解决,但是当构建我的解决方案并尝试从 excel 中的单元格调用我的函数 GetAbsPrice 时,会显示一个窗口消息“初始化[错误]方法未注册-不支持的签名。抽象或通用:Class1.GetAbsPriceForNav'
  • 是否可以使用 DNA 将 DataTable 返回到 Excel?因为我将函数的结果类型从列表更改为 DataTable,当我更改为 int 或字符串时,我总是收到相同的消息“初始化 [错误] 方法未注册 - 不支持的签名、抽象或通用:'Class1.GetAbsPriceForNav'”它运作良好,excel dna 是否支持列表/数据表等类型?如果不是,我该如何更改以从数据库中获取多行?
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2010-09-15
相关资源
最近更新 更多