Zdefiniowałem własną funkcję programu Excel (o nazwie ADXExcelFunctionDeescriptor). Kod procedury wygląda następująco:Funkcja programu Excel zgłasza wyjątek po ustawieniu przez kod. Działa, gdy jest używany w programie Excel
public static object ExecuteMyFunction(object values, object tagName)
{ // Some code here }
Metoda otrzymuje tablicę podwójnych wartości i ciąg znaków, zwany nazwą.
W konstrukcji zobaczyć mój ADXExcelFunctionDeescriptor wygląda jak następuje:
zadzwonię i ustawić funkcję przez następujące linie kodu:
var formula = string.Format(@"={0}({1};{2})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
To spowoduje wyjątek! Wyjątek wygląda następująco:
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:
Co więcej, jeśli nie przekażę parametru tagName, funkcja zwróci wynik bez żadnego wyjątku lub błędu.
var formula = string.Format(@"={0}({1})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
Więc myślę, że to ma coś wspólnego z parametrem strun. Próbowałem również otaczać parametr ciąg znaków "lub", ale bez zmian do tej pory
Dalej, jeśli wpiszę funkcję bezpośrednio w Excel działa bez żadnych problemów. Tak, na przykład, jeśli wpiszę następujące formuła w Excelu:
=Temp.DoSomething(B2:B13;"Flow")
Może przegapić coś lub robi coś złego
jaki jest wewnętrzny wyjątek? –
@israelaltar: Wewnętrzny wyjątek ma wartość NULL. –
Czy próbowałeś użyć w swojej formule przecinka = {0} ({1}, {2}) lub dwukropka? –