我已经定义了自己的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")
也许我错过了什么或做错了什么?
答案 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
,总是这样说是正确的 使用,