在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
有什么想法吗?
答案 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。