Внутри ac # UDF для Excel 2007 мне нужно оценить значение параметров функции Excel (не спрашивайте почему, длинная история).
Допустим, у нас есть эта функция Excel для оценки:
= имя-функции ("2009-01-01"; "B4"; "foo"; concatenate ("a"; "b"))
Моя цель - получить строку с:
= имя-функции ("2009-01-01"; "значение ячейки B4"; "foo"; "ab")
Я оцениваю значение параметров благодаря этому фрагменту:
Object comObject = app.Evaluate(param); //app = Microsoft.Office.Interop.Excel.Application
String value = getValueFromComObject(comObject);
getValueFromComObject detail:
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();
}
}
Первый и третий параметры нашего примера напрямую возвращаются как String для application.Evaluate.Второй параметр возвращается как диапазон и корректно управляется благодаря приведению типа.
Проблема в четвертом параметре, я не знаю, какой тип приведения используется для оценки функции конкатенации, это явно не диапазон, а toString () дает мне ссылку: -2146826273
Есть идеи?