使用Excel-DNA,如何将Excel加载项函数调用中的未指定参数与缺少的参数区分开来?

时间:2017-11-16 19:33:26

标签: c# .net excel excel-dna

这个问题是关于Excel-DNA对Excel中加载函数调用的解释。

在Excel中,未指定缺少参数不相同。这可以通过IF函数看到(它有两个必需参数后跟一个可选参数):

=IF() - 这是无效的

=IF(,) - 返回FALSE

=IF(,,) - 返回0

我正在使用ExcelIntegration.RegisterDelegates()方法在Excel中注册加载项函数,注册这样的函数:

Delegate del = new Func<object, object, object, object>((a, b, c) => a.ToString() + " " + b.ToString() + " " + c.ToString());

var fnAttr = new ExcelFunctionAttribute { Name = "TestFunc", Category = "ExcelDnaTest", Description = "Test function", IsHidden = false };

var args = new List<object>();
args.Add(new ExcelArgumentAttribute { Name = "Arg1", Description = "First argument", AllowReference = true });
args.Add(new ExcelArgumentAttribute { Name = "Arg2", Description = "Second argument", AllowReference = true });
args.Add(new ExcelArgumentAttribute { Name = "Arg3", Description = "Third argument", AllowReference = true });

ExcelIntegration.RegisterDelegates(new List<Delegate> { del }, new List<object> { fnAttr }, new List<List<object>> { args });

当提供所有参数时,这将按预期工作:

=TestFunc("A", "B", "C") - 返回“A B C”

但是,没有参数(即三个未指定的参数)的结果与提供两个或三个缺少参数时的结果相同(我不知道提供单个缺失参数的方法):

=TestFunc()

=TestFunc(,)

=TestFunc(,,)

所有这些回归:

“ExcelDna.Integration.ExcelMissing ExcelDna.Integration.ExcelMissing ExcelDna.Integration.ExcelMissing”

对于类似于Excel的IF函数的加载项函数,这三个公式表示不同的函数调用,但我找不到区分它们的方法 - Excel-DNA似乎提供它的{{1} }值未指定缺少参数。

问:使用Excel-DNA,如何区分上述Missing的三次调用?

1 个答案:

答案 0 :(得分:4)

您无法在用户定义的功能中区分这些情况。

我不相信Excel C API(Excel-DNA用于实现Excel - > .NET UDF接口)允许任何UDF看到这种区别 - 没有像&#39这样的概念;未指定&#39; C API中的参数 - 两种情况下的XLOPER类型都以xltypeMissing传递。