gli*_*ick 2 c# excel excel-formula excel-dna
考虑这样的 ExcelDNA 函数定义:
[ExcelFunction(Name = "Fnc1", Description = "Fnc1")]
public static object Fnc1(
[ExcelArgument(Name = "Arg1", Description = "Arg1", AllowReference = true)]
object rng)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
=Fnc1(A1)或这样的连续单元格范围调用时,它工作正常=Fnc1(A1:A3)。=Fnc1(A1,A5,A10). #VALUE!返回错误。有没有办法如何调用具有不连续范围的未知单元格数量的ExcelDNA 函数?
我已经尝试像这样声明参数,params object[] rng但也没有运气。
为了让 Excel-DNA 函数允许在运行时传入未知数量的参数,您需要params object[]在函数参数中使用。
public static class MyFunctions
{
[ExcelFunction]
public static object Hello(params object[] values)
{
return "Hello " + DateTime.Now;
}
}
Run Code Online (Sandbox Code Playgroud)
那么,如果您使用硬编码值(例如)调用它=Hello(10, 20)或使用单元格引用(例如=Hello(A1,A5,A10).
但是,Excel-DNA 不支持可变数量的参数,因此您必须使用ExcelDna.Registration帮助程序库来注册您的函数。
安装ExcelDna.Registration NuGet 包,然后在您的.dna文件中,标记要使用的加载项程序集引用,ExplicitRegistration例如:
<?xml version="1.0" encoding="utf-8"?>
<DnaLibrary Name="My Add-In" (...)>
<ExternalLibrary Path="MyAddIn.dll" ExplicitRegistration="true" (...) />
</DnaLibrary>
Run Code Online (Sandbox Code Playgroud)
然后,在您的 中AutoOpen,您通过ProcessParamsRegistrations调用注册函数......例如
public class AddIn : IExcelAddIn
{
public void AutoOpen()
{
ExcelRegistration
.GetExcelFunctions()
.ProcessParamsRegistrations()
.RegisterFunctions();
// ...
}
public void AutoClose()
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
函数的隐式与显式注册
默认情况下,Excel-DNA 会搜索public static程序集中的每个方法,并将它们注册为 Excel 中的函数。这就是隐式注册过程。
ExplicitRegistration="true"轮流关闭隐式注册,因此没有被自动注册-你必须做你自己-这是我在做什么在AutoOpen上面的... RegisterFunctions()电话。如果您不关闭隐式注册,则函数最终会被注册两次(一次由隐式进程注册,然后再次由您的代码注册)并且您会收到错误消息
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |