这个问题是关于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
的三次调用?
答案 0 :(得分:4)
您无法在用户定义的功能中区分这些情况。
我不相信Excel C API(Excel-DNA用于实现Excel - > .NET UDF接口)允许任何UDF看到这种区别 - 没有像&#39这样的概念;未指定&#39; C API中的参数 - 两种情况下的XLOPER类型都以xltypeMissing
传递。