Excel 2007 の ac# UDF 内で、Excel 関数パラメーターの値を評価する必要があります (理由は聞かないでください、長い話です)。
評価するこの Excel 関数があるとします。
=afunctionname("2009-01-01" ; "B4" ; "foo" ; concatenate("a";"b") )
私の目標は、次の文字列を取得することです:
=afunctionname("2009-01-01" ; "B4 セルの値" ; "foo" ; "ab" )
このスニペットのおかげで、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();
}
}
この例の最初と 3 番目のパラメーターは、 application.Evaluate によって String として直接返されます。2 番目のパラメーターは範囲として返され、型キャストのおかげで正しく管理されます。
問題は 4 番目のパラメーターです。連結関数の評価に適用する必要がある魔女のキャスト タイプがわかりません。明らかに範囲ではなく、toString() から参照が得られます: -2146826273
何か案が?