Я определил свою собственную функцию Excel (названную ADXExcelFunctionDeescriptor). Заглушка метода выглядит следующим образом:
public static object ExecuteMyFunction(object values, object tagName)
{ // Some code here }
Метод получает массив двойных значений и строку с именем 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")
Может я что-то упускаю или делаю что-то не так?
object
, не лучше ли использоватьExcel.Range
иstring
в качестве типов? - person SierraOscar   schedule 29.07.2015