- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这样的 ExcelDNA 函数定义:
[ExcelFunction(Name = "Fnc1", Description = "Fnc1")]
public static object Fnc1(
[ExcelArgument(Name = "Arg1", Description = "Arg1", AllowReference = true)]
object rng)
{
// ...
}
=Fnc1(A1)
或像这样的 连续 单元格范围 =Fnc1(A1:A3)
. =Fnc1(A1,A5,A10)
.错误#VALUE!
被退回。 Is there a way how to call ExcelDNA function with discontinuous range of unknown amount of cells?
我试过这样声明参数 params object[] rng
但也没有运气。
最佳答案
为了拥有允许在运行时传入未知个参数的 Excel-DNA 函数,您需要在您的代码中使用 params object[]
函数参数。
public static class MyFunctions
{
[ExcelFunction]
public static object Hello(params object[] values)
{
return "Hello " + DateTime.Now;
}
}
然后,如果您使用硬编码值调用它并不重要,例如=Hello(10, 20)
或者如果您使用单元格引用,例如=你好(A1,A5,A10)
。
但是,Excel-DNA 不支持开箱即用的可变参数数量,因此您必须使用 ExcelDna.Registration
帮助库,以便注册您的函数。
安装 ExcelDna.Registration NuGet package ,然后在您的 .dna
文件中,将您的加载项程序集引用标记为使用 ExplicitRegistration
例如:
<?xml version="1.0" encoding="utf-8"?>
<DnaLibrary Name="My Add-In" (...)>
<ExternalLibrary Path="MyAddIn.dll" ExplicitRegistration="true" (...) />
</DnaLibrary>
然后,在您的 AutoOpen
中,您使用 ProcessParamsRegistrations
调用注册函数...例如
public class AddIn : IExcelAddIn
{
public void AutoOpen()
{
ExcelRegistration
.GetExcelFunctions()
.ProcessParamsRegistrations()
.RegisterFunctions();
// ...
}
public void AutoClose()
{
// ...
}
}
Implicit vs Explicit Registration of functions
默认情况下,Excel-DNA 会搜索程序集中的每个 public static
方法,并将它们注册为 Excel 函数。这就是隐式注册过程。
ExplicitRegistration="true"
关闭关闭 隐式注册,因此不会自动注册任何内容 - 你必须自己做 - 这就是我在AutoOpen
上面的 ... RegisterFunctions()
调用。 如果您不关闭隐式注册,那么函数最终会被注册两次(一次是通过隐式过程,然后是您的代码)并且你收到错误信息
关于c# - 如何将不连续的单元格范围从 Excel 传递到 ExcelDNA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60077214/
我是一名优秀的程序员,十分优秀!