2015-07-20 11 views
8

में उपयोग किए जाने पर काम करता है मैंने अपना खुद का एक्सेल फ़ंक्शन परिभाषित किया है (जिसे ADXExcelFunctionDeescriptor कहा जाता है)। विधि स्टब निम्न जैसा दिखता है:कोड के पीछे सेट करते समय Excel फ़ंक्शन अपवाद फेंकता है। एक्सेल

public static object ExecuteMyFunction(object values, object tagName) 
{ // Some code here } 

विधि को डबल मानों और एक स्ट्रिंग नामक एक सरणी प्राप्त होती है, जिसे नाम कहा जाता है।
देखने डिजाइन में मेरी ADXExcelFunctionDeescriptor ऐसा दिखाई देता है:

enter image description here

मैं फोन और कोड की निम्न लाइनों द्वारा समारोह सेट:

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: 

अगर मैं टैगनाम पैरामीटर समारोह किसी भी अपवाद या त्रुटि के बिना एक परिणाम देता है पारित नहीं है: अपवाद ऐसा दिखाई देता है।

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

भीतरी अपवाद क्या है सही है? –

+0

@israelaltar: आंतरिक अपवाद न्यूल है। –

+1

क्या आपने अपने सूत्र में अल्पविराम = {0} ({1}, {2}) या कोलन का उपयोग करने का प्रयास किया है? –

उत्तर

6

प्रतीत नहीं होता है जब आप अपने निर्माण यूडीएफ स्ट्रिंग सूत्र में है कि दूसरा पैरामीटर tagCaption पीछे उद्धरण चिह्न जोड़ रहे हैं की तरह होनी चाहिए। उस मूल्य के चारों ओर उद्धरण।

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

इसके अलावा: (Excel - Inserting formula with VBA

VBA .Formula, .FormulaArray और .FormulaR1C1 उपयोग अंतरराष्ट्रीय विभाजक (यानी ,) और .FormulaLocal में

, और .FormulaR1C1Local उपयोगकर्ता की भाषा उपयोग करती हैं इसलिए कर सकते हैं: देखने के लिए यहाँ क्रिस Neilsen की टिप्पणी ; का उपयोग करें यदि यह आपकी भाषा सेटिंग है)। तो यह ओपी .FormulaArray को निर्दिष्ट करने के लिए यह कहना हमेशा उपयोग ,

संबंधित मुद्दे