在连接函数上的Application.Evaluate()的Excel ComType
本文关键字:Excel ComType Evaluate Application 连接 函数 | 更新日期: 2023-09-27 18:13:53
在excel 2007的c# UDF中,我需要评估excel函数参数的值(不要问为什么,长话短说)。
假设我们有这样一个Excel函数来求值:
= afunctionname("2009-01-01";"B4";"foo";连接("a"、"b"))
我的目标是得到一个字符串:= afunctionname("2009-01-01";"B4 cell的值";"foo";"ab")
我计算了参数的值,这要感谢下面的代码片段:
Object comObject = app.Evaluate(param); //app = Microsoft.Office.Interop.Excel.Application
String value = getValueFromComObject(comObject);
getValueFromComObject detail:
private static String getValueFromComObject(Object comObject) {
if ((comObject as Range) != null)
{
Range rge = ((Range)comObject);
switch (Type.GetTypeCode(rge.Value.GetType()))
{
case TypeCode.DateTime:
return ((DateTime)rge.Value).ToShortDateString();
default:
return rge.Value.ToString().Trim();
}
}
else
{
return comObject.ToString();
}
}
我们的示例的第一个和第三个参数直接返回字符串应用程序。评估。第二个参数作为一个范围返回,并且由于类型转换得到了正确的管理。
问题是第四个参数,我不知道我必须在连接函数的评估上应用哪种类型的转换,它显然不是一个范围,toString()给了我引用:-2146826273
任何想法?
我找到问题了:)!
首先,返回类型是Int32,返回值对应于错误码#value,根据这一页:如何知道一个单元格在c#公式中是否有错误
实际上,字符串的长度对于eval模式下的连接函数来说太长了,我在Excel中尝试过它的工作原理,但是eval给了我一个错误。所以我只需要在concatenate方法中减少每个字符串的长度(添加更多参数),它就可以工作了。
谢谢大家的帮助。
在C Sharp中,要计算我们在字符串"中设置的公式,以分隔参数。在原生excel应用程序中,我们添加了";"。要计算静态值(例如:CONCATENATE("a","b")),我们使用"Application"。评估"方法。要计算单元格中的值(例如:CONCATENATE(A1,B1)),我们使用Application._Evaluate.