2016-07-06 3 views
5

पढ़ते समय मैं OfficeOpenXml.ExcelWorksheet पढ़ रहा हूं और संग्रह के बीच में ArgumentOufOfRangeException प्राप्त कर रहा हूं।सी # ArgumentOutOfRangeException ExcelWorksheet

मैं इस process.Information = sheet.Cells[line, i++].Text; की तरह पढ़ रहा हूं। इस लाइन पर i = 22 जबकि sheet.Dimension.Column = 28sheet #columns

i value जब मैं डिबगिंग रहा हूँ और मुझे लगता है कि संग्रह अपवाद विधि .Text पर फेंक दिया जाता है, जबकि .Value विधि सही मान दिखाया जा रहा है की गणना।

collection enumerated

अपवाद स्टैक ट्रेस के अनुसार, अपवाद System.Text.StringBuilder.Insert() विधि

trace

---- संपादित करें द्वारा फेंका जा रहा है - - स्वीकृत उत्तर के बाद मुझे एहसास हुआ कि समस्या न केवल पढ़ने पर है। मैं एक ही फ़ाइल को एक अतिरिक्त कॉलम (आयात सफलता या असफलता) के साथ उत्तर देता हूं और जब मैं शीट प्रारूपण कर रहा हूं, तो मुझे विधि एक ही त्रुटि मिलती है, सभी विधि System.Text.StringBuilder.Insert() के कारण। मैं एक स्तंभ sheet.Column(22).AutoFit() AutoFit को यह स्टैक ट्रेस

at System.Text.StringBuilder.Insert(Int32 index, Char* value, Int32 valueCount) 
at System.Text.StringBuilder.Insert(Int32 index, Char value) 
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator.ToNetFormat(String ExcelFormat, Boolean forColWidth) 
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.ExcelFormatTranslator..ctor(String format, Int32 numFmtID) 
at OfficeOpenXml.Style.XmlAccess.ExcelNumberFormatXml.get_FormatTranslator() 
at OfficeOpenXml.ExcelRangeBase.GetFormattedText(Boolean forWidthCalc) 
at OfficeOpenXml.ExcelRangeBase.get_TextForWidth() 
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth, Double MaximumWidth) 
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns(Double MinimumWidth) 
at OfficeOpenXml.ExcelRangeBase.AutoFitColumns() 
at OfficeOpenXml.ExcelColumn.AutoFit() 
at SkiptraceAPI.Models.ProcessosRepository.formatExcel(ExcelPackage package, Boolean addValidation) in 
+1

यह आपके सेल की शैली को संसाधित करने से संबंधित कार्यान्वयन में एक बग जैसा दिखता है। 'Process.Information = sheet.GetValue (रेखा, i ++) 'को आज़माएं। – dasblinkenlight

+0

मूल्य संपत्ति पढ़ने में समस्या क्या होगी? क्या आपको वास्तव में '.Text' संपत्ति की आवश्यकता है? मैंने कुछ उदाहरणों के लिए गुगल किया है और मुझे लगता है कि 'टेक्स्ट' के बजाय 'वैल्यू' का उपयोग बहुत अधिक किया जाता है। आप जिस पैकेज का उपयोग कर रहे हैं उसके लिए वास्तव में दस्तावेज़ीकरण नहीं मिल रहा है, लेकिन कुछ विशेष संपत्ति 'टेक्स्ट' नहीं है? –

+0

वास्तव में मुझे नहीं पता कि '.Value' के बजाय' .Text' का उपयोग करने में कोई समस्या है या नहीं। यह पुराना कोड है और याद नहीं है कि इस तरह का चयन क्यों करें (लेकिन यह एक कारण होना चाहिए)। यह कोड हमेशा काम करता है और ग्राहक पहली बार इस त्रुटि की रिपोर्ट कर रहा है। मुझे लगता है कि मैं इसे 'वैल्यू' में बदल दूंगा, लेकिन बस समस्या को समझना चाहता हूं ... – NunoRibeiro

उत्तर

2

स्टैक ट्रेस Style.XmlAccess उल्लेख के हिस्से से आंकना है कोशिश कर रहा हूँ, ऐसा लगता है कि आप OfficeOpenXml के कार्यान्वयन में एक वास्तविक बग की शैली से शुरू हो रहा में भाग प्रश्न में सेल।

आप के लिए काम करता है Value.ToString() का उपयोग करते समय सेल नहीं null है के बाद से, आप नए जोड़े अशक्त सशर्त सिंटेक्स के उपयोग से बग के आसपास काम कर सकते हैं:

process.Information = sheet.Cells[line, i++].Value?.ToString(); 
//            ^

एक अन्य संभावित काम के आसपास GetValue<T> उपयोग कर रहा है:

process.Information = sheet.GetValue<string>(line, i++); 

संपादित करें: ऐसा लगता है कि वहाँ 22-nd कॉलम के कक्ष में एक शैली है की तरह जिसमें एक गैर-संख्यात्मक मान है जहां पुस्तकालय को संख्यात्मक स्ट्रिंग की उम्मीद है। पुस्तकालय एक संख्या के लिए स्ट्रिंग को पार्स करने का प्रयास करता है, जिससे अपवाद होता है। आप सेल के प्रारूप को बदलकर इस पर काम कर सकते हैं, लेकिन वास्तविक फिक्स पुस्तकालय को अपवाद फेंकने के बिना स्वरूप विसंगतियों का पता लगाने के लिए संशोधित करना है।

+0

हां, तो मैं '' को बदल दूंगा। 'GetValue ' (जैसा कि आपने सुझाव दिया है) द्वारा टेक्स्ट' लेकिन अब मुझे शीट का उपयोग करते समय अपवाद का सामना करना पड़ रहा है। कॉलम (22) .ऑटोफिट() '... कोई विचार? – NunoRibeiro

+0

@NunoRibeiro कॉलम 22 में एक मान की शैली के साथ कुछ गड़बड़ होनी चाहिए, क्योंकि शैली के लिए जो कुछ भी संग्रहीत किया जाता है, वह कार्यान्वयन में कई बग को उजागर करता है। – dasblinkenlight

+0

@NunoRibeiro यदि आप इस स्प्रेडशीट को स्वतंत्र रूप से संशोधित कर सकते हैं, तो शैली के बिना अपनी सामग्री को एक नए में कॉपी करने पर विचार करें, और देखें कि परिणामस्वरूप स्प्रेडशीट में आप कॉलम खोल/ऑटोफिट कर सकते हैं या नहीं। – dasblinkenlight

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