2015-07-20 12 views
8

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:

enter image description here

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

+0

ngoại trừ bên trong là gì? –

+0

@israelaltar: Ngoại lệ bên trong là NULL. –

+1

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? –

Trả lời

6

không giống như bạn đang thêm dấu ngoặc kép quanh rằng tagCaption tham số thứ hai trong xây dựng công thức chuỗi UDF của bạn nên có. trích dẫn xung quanh giá trị đó.

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

Ngoài ra: xem bình luận Chris Neilsen ở đây: Excel - Inserting formula with VBA

trong VBA .Formula, .FormulaArray.FormulaR1C1 sử dụng quốc tế seperator (tức ,) và .FormulaLocal, và .FormulaR1C1Local sử dụng ngôn ngữ của người sử dụng (do đó có thể sử dụng ; nếu đó là cài đặt ngôn ngữ của bạn). Vì vậy, đối OP này gán cho .FormulaArray nó là đúng khi nói luôn sử dụng ,

Các vấn đề liên quan