Excel函数在通过代码设置后抛出exception。 在excel中使用时有效

我已经定义了我自己的Excel函数(称为ADXExcelFunctionDeescriptor )。 方法存根(stub)如下所示:

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

该方法接收一个double值的数组和名为name的string。
在devise视图中,我的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; 

这将导致exception! exception如下所示:

 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参数,函数将返回一个没有任何exception或错误的结果。

 var formula = string.Format(@"={0}({1})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption); resultRange.set_Value(Type.Missing, formula); resultRange.Formula = resultRange.Value; 

所以我认为这与string参数有关。 我也尝试用“或”字符围绕string参数,但目前为止没有改变。

此外,如果我直接在Excel中input函数,它没有任何问题。 所以,例如,如果我在Excel中input以下公式:

 =Temp.DoSomething(B2:B13;"Flow") 

也许我错过了什么或做错了什么?

看起来不像在构造的UDFstring公式中围绕第二个参数tagCaption添加引号。 应该有报价围绕这个价值。

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

另外:请参阅Chris Neilsen的评论: Excel – 使用VBA插入公式

在VBA中.Formula.FormulaArray.FormulaR1C1使用国际分隔符(即)和.FormulaLocal ,而.FormulaR1C1Local使用用户的语言(所以可以使用;如果那是你的语言设置)。 所以对于这个OP分配.FormulaArray说总是使用是正确的,

Interesting Posts