Tôi đã xác định chức năng Excel của riêng mình (được gọi là ADXExcelFunctionDeescriptor). Phương thức khai báo trông giống như sau:Chức năng Excel ném ngoại lệ khi được đặt theo mã phía sau. Hoạt động khi được sử dụng trong excel
public static object ExecuteMyFunction(object values, object tagName)
{ // Some code here }
Phương thức nhận một mảng giá trị kép và một chuỗi, được gọi là tên.
Trong thiết kế xem tôi ADXExcelFunctionDeescriptor trông giống như sau:
tôi gọi và thiết lập các chức năng của các dòng mã sau đây:
var formula = string.Format(@"={0}({1};{2})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
này sẽ dẫn đến một ngoại lệ! Ngoại lệ trông giống như sau:
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:
Hơn nữa, nếu tôi không chuyển thông số thẻName, hàm trả về kết quả mà không có bất kỳ ngoại lệ hoặc lỗi nào.
var formula = string.Format(@"={0}({1})", Temp.FORMULA_NAME, this.DataRangeTextBox.Text, tagCaption);
resultRange.set_Value(Type.Missing, formula);
resultRange.Formula = resultRange.Value;
Vì vậy, tôi nghĩ rằng nó có liên quan đến tham số chuỗi. Tôi cũng đã cố gắng bao quanh thông số chuỗi bằng ký tự "hoặc" nhưng không có thay đổi nào cho đến nay.
Hơn nữa, nếu tôi nhập hàm trực tiếp vào Excel, nó sẽ hoạt động mà không gặp bất kỳ vấn đề nào. công thức trong Excel:
=Temp.DoSomething(B2:B13;"Flow")
có lẽ tôi bỏ lỡ một cái gì đó hoặc làm điều gì đó sai
ngoại trừ bên trong là gì? –
@israelaltar: Ngoại lệ bên trong là NULL. –
Bạn đã thử sử dụng dấu phẩy = {0} ({1}, {2}) hay dấu hai chấm trong công thức của mình? –