Excel函数在由后面的代码设置时抛出异常。在excel中使用时可以工作

时间:2015-07-20 06:19:06

标签: c# excel excel-formula excel-addins addin-express

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

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: 

此外,如果我没有传递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")

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

1 个答案:

答案 0 :(得分:6)

看起来你在构造的UDF字符串公式中的第二个参数tagCaption周围添加了引号。该值应该有引号。

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

另外:请参阅Chris Neilsen的评论:Excel - Inserting formula with VBA

  VBA中的

.Formula.FormulaArray.FormulaR1C1使用国际   分隔符(即,)和.FormulaLocal以及.FormulaR1C1Local使用   用户的语言(如果这是您的语言设置,可以使用;)。   因此,对于这个OP分配给.FormulaArray,总是这样说是正确的   使用,