在串联函数上的Excel ComType of Application.Evaluate()

时间:2011-11-09 18:00:23

标签: c# excel function vsto evaluate

在excel 2007的c#UDF中,我需要评估Excel函数参数的值(不要问为什么,长篇故事)。

我们假设我们有Excel功能来评估:

= afunctionname(" 2009-01-01";" B4&#34 ;;" foo&#34 ;;连接(" a";&## 34; b"))

我的目标是获得一个字符串:

=功能名称(&#34; 2009-01-01&#34 ;;&#34; B4单元格的价值&#34 ;;&#34; foo&#34 ;;&#34; ab&#34;)< / p>

感谢这段代码,我评估了params的价值:

Object comObject = app.Evaluate(param); //app = Microsoft.Office.Interop.Excel.Application
String value = getValueFromComObject(comObject);

getValueFromComObject详细信息:

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();
                }
}

我们示例的第一个和第三个参数直接以application.Evaluate的形式返回String。第二个参数是作为范围返回并且正确管理感谢类型转换。

问题在于第四个参数,我不知道我必须应用于连接函数的评估,它显然不是一个范围而且toString()给了我参考:-2146826273

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

好的,我发现了问题:)!

首先,返回类型是Int32,返回值对应于根据此页面的错误代码#value:How to know if a cell has an error in the formula in C#

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

谢谢大家的帮助。

答案 1 :(得分:0)

在C Sharp中,要评估我们在字符串“,”中设置的公式,以分隔参数。在本机excel应用程序中,我们放置“;”。为了评估静态值(例如:CONCATENATE(“a”,“b”)),我们使用“Application.Evaluate”方法。要评估单元格中的值(例如:CONCATENATE(A1,B1)),我们使用Application._Evaluate。