8

独自の 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")

多分私は何かを逃したり、何か間違ったことをしていますか?

4

1 に答える 1