Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接函数上应用程序的Excel ComType.Evaluate()_C#_Excel_Function_Vsto_Evaluate - Fatal编程技术网

C# 连接函数上应用程序的Excel ComType.Evaluate()

C# 连接函数上应用程序的Excel ComType.Evaluate(),c#,excel,function,vsto,evaluate,C#,Excel,Function,Vsto,Evaluate,在Excel2007的c#UDF中,我需要评估excel函数参数的值(不要问为什么,说来话长) 假设我们有一个Excel函数来评估: =函数名(“2009-01-01”;“B4”;“foo”串联(“a”;“b”)) 我的目标是获得一个字符串: =函数名(“2009-01-01”;“B4单元的值”;“foo”;“ab”) 由于以下代码段,我评估了参数的值: Object comObject = app.Evaluate(param); //app = Microsoft.Office.Intero

在Excel2007的c#UDF中,我需要评估excel函数参数的值(不要问为什么,说来话长)

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

=函数名(“2009-01-01”;“B4”;“foo”串联(“a”;“b”))

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

=函数名(“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直接作为字符串返回。第二个参数是作为范围返回,并且由于类型转换而得到正确管理

问题是对于第四个参数,我不知道我必须应用于连接函数求值的witch cast类型,它显然不是一个范围,toString()给了我一个引用:-2146826273

有什么想法吗?

好的,我发现了问题:)

首先,返回类型为Int32,返回值对应于错误代码#值,根据本页:

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


谢谢大家的帮助。

在C夏普中,计算我们在字符串“,”中设置的公式,以分隔参数。在本机excel应用程序中,我们将“;”。为了计算静态值(例如:连接(“a”、“b”),我们使用“Application.evaluate”方法。要计算单元格中的值(例如:CONCATENATE(A1,B1)),我们使用Application.\u evaluate.

不确定C是否正确,但在VB中,您可以使用TypeName或.GetType.ToString(或类似的东西)来确定它是什么类型的对象。这是错误代码2015,“类型不匹配”。可能与尝试将函数转换为字符串有关,不确定。在VBA
typename(application.Evaluate(“concatenate”(“a”、“b”))中,
给出“string”。我不知道为什么你的app.evaluate不会给出类似的结果……evaluate有很多怪癖:你可能会发现这篇博文很有用