使用Excel-DNA,如何将Excel插件函数调用中未指定的参数与缺失的函数区分开来?

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

在Excel中, 未指定缺less的参数是不一样的。 这可以通过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") – 返回“ABC”

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

=TestFunc()

=TestFunc(,)

=TestFunc(,,)

所有这些返回:

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

对于类似于Excel的IF函数的插入函数,这三个公式表示不同的函数调用,但是我找不到一个方法来区分它们 – Excel-DNA似乎为未指定缺less的参数提供了Missing值。

问:使用Excel-DNA,如何区分上面三个对TestFunc()调用?

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

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