0

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

假设我们有这个 Excel 函数来评估:

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

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

=afunctionname("2009-01-01" ; "B4 单元格的值" ; "foo" ; "ab" )

由于这个片段,我评估了参数的值:

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

任何的想法?

4

2 回答 2

0

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

首先返回类型是 Int32 并且返回值对应于错误代码 #value 根据此页面:如何知道单元格在 C# 中的公式中是否有错误

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

感谢大家的帮助。

于 2011-11-10T08:00:26.153 回答
0

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

于 2013-03-15T15:44:39.640 回答