在连接函数上的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

任何想法?

在连接函数上的Application.Evaluate()的Excel ComType

我找到问题了:)!

首先,返回类型是Int32,返回值对应于错误码#value,根据这一页:如何知道一个单元格在c#公式中是否有错误

实际上,字符串的长度对于eval模式下的连接函数来说太长了,我在Excel中尝试过它的工作原理,但是eval给了我一个错误。所以我只需要在concatenate方法中减少每个字符串的长度(添加更多参数),它就可以工作了。

谢谢大家的帮助。

在C Sharp中,要计算我们在字符串"中设置的公式,以分隔参数。在原生excel应用程序中,我们添加了";"。要计算静态值(例如:CONCATENATE("a","b")),我们使用"Application"。评估"方法。要计算单元格中的值(例如:CONCATENATE(A1,B1)),我们使用Application._Evaluate.