2015-07-20 53 views
8

我已經定義了我自己的Excel函數(稱爲ADXExcelFunctionDeescriptor或)。方法存根(stub)如下所示:Excel函數在通過代碼設置後拋出異常。在Excel中使用時工作

public static object ExecuteMyFunction(object values, object tagName) 
{ // Some code here } 

該方法接收一個double值數組和一個名爲name的字符串。
在設計視圖中我ADXExcelFunctionDeescriptor看起來像以下:

enter image description here

我打電話,通過下面的代碼行設置功能:

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: 

而且,如果我沒有通過的標記名參數的函數返回沒有任何異常或錯誤的結果。

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") 

也許我錯過了什麼或做錯事

+0

什麼是內部異常? –

+0

@israelaltar:內部異常是NULL。 –

+1

您是否嘗試過在公式中使用逗號= {0}({1},{2})或冒號? –

回答

6

看起來不像你在你的構建UDF串公式在第二個參數tagCaption加上引號應該有。在該值附近的引號。

var formula = string.Format(@"={0}({1};""{2}"")",Temp.FORMULA_NAME, 
           this.DataRangeTextBox.Text, tagCaption); 

另外:看到克里斯尼爾森的評論在這裏:Excel - Inserting formula with VBA

在VBA .Formula.FormulaArray.FormulaR1C1利用國際 分隔符(即,)和.FormulaLocal,並.FormulaR1C1Local使用 語言的用戶的(這樣可以如果這是您的語言設置,請使用;)。 因此,對於這個OP分配給.FormulaArray它是正確的說法總是 使用,

相關問題