独自の Excel 関数 ( ADXExcelFunctionDeescriptorと呼ばれる) を定義しました。メソッド スタブは次のようになります。
public static object ExecuteMyFunction(object values, object tagName)
{ // Some code here }
このメソッドは、double 値の配列と name という名前の文字列を受け取ります。
デザイン ビューでは、私のADXExcelFunctionDeescriptorは次のようになります。
次のコード行で関数を呼び出して設定します。
var formula = string.Format(@"={0}({1};{2})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
これにより、例外が発生します。例外は次のようになります。
System.Runtime.InteropServices.COMException occurred
HResult=-2146827284
Message=Ausnahme von HRESULT: 0x800A03EC
Source=""
ErrorCode=-2146827284
StackTrace:
bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
bei Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object )
bei bb.ExcelToolbar.Controls.bbControl.ApplyFormula(Object sender, EventArgs e) in c:\xx\yy\zz\bb\bb.ExcelToolbar\Controls\bbControlcs:Zeile 88.
InnerException:
さらに、tagName パラメーターを渡さない場合、関数は例外やエラーなしで結果を返します。
var formula = string.Format(@"={0}({1})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
したがって、文字列パラメーターと関係があると思います。また、文字列パラメーターを " または ' 文字で囲みましたが、今のところ変更はありません。
さらに、関数を Excel に直接入力すると、問題なく動作します。たとえば、Excel で次の数式を入力すると、次のようになります。
=Temp.DoSomething(B2:B13;"Flow")
多分私は何かを逃したり、何か間違ったことをしていますか?