C# 连接函数上应用程序的Excel ComType.Evaluate()
在Excel2007的c#UDF中,我需要评估excel函数参数的值(不要问为什么,说来话长) 假设我们有一个Excel函数来评估: =函数名(“2009-01-01”;“B4”;“foo”串联(“a”;“b”)) 我的目标是获得一个字符串: =函数名(“2009-01-01”;“B4单元的值”;“foo”;“ab”) 由于以下代码段,我评估了参数的值: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
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有很多怪癖:你可能会发现这篇博文很有用