2016-07-06 15 views
5

Bir OfficeOpenXml.ExcelWorksheet okuyorum ve koleksiyonun ortasında ArgumentOufOfRangeException alıyorum.C# ExcelWorksheet okurken ArgümanOutOfRangeException

Bu gibi bir kitap okuyorum process.Information = sheet.Cells[line, i++].Text;. Bu satırda i = 22, sheet.Dimension.Column = 28. sheet #columns

i value Ben ayıklama ve ben .Value yöntem doğru değeri gösterilirken İstisna yöntemine .Text atıldı görüyoruz koleksiyonu numaralandırmak sarıldığında. durum yığın izlemesi göre

collection enumerated

, özel System.Text.StringBuilder.Insert() yöntemiyle

trace

---- DÜZENLEME tarafından atılan ediliyor - - Kabul edilen cevaptan sonra, problemin sadece okumada olmadığını fark ettim. Ben aynı dosyaya fazladan bir sütun (import başarı veya başarısızlık) ile cevap veriyorum ve ben sayfa formatation yapıyorum yaparken aynı hata, tüm System.Text.StringBuilder.Insert() yöntemi nedeniyle olsun. Eğer tarzında tetiklediği OfficeOpenXml uygulanmasında gerçek bir böcek koştu gibi bu Style.XmlAccess söz yığın izleme kısmından bakılırsa yığın izleme

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

Bu, hücrenizin stilini işlemeyle ilgili uygulamada bir hataya benziyor. Bunun yerine process.Information = sheet.GetValue (satır, i ++) 'yi deneyin. – dasblinkenlight

+0

Değer özelliğini okumada sorun ne olurdu? Gerçekten .text 'özelliğine ihtiyacınız var mı? Bazı örnekler için googled ettik ve 'Value' yerine 'Text' yerine çok kullanılan bir şey olduğunu gördüm. Kullandığınız paket için gerçekten belge bulamıyor, ancak 'Metin' bazı özel özellik değil mi? –

+0

Aslında '.Value' yerine' .Text' kullanarak bir sorun olup olmadığını bilmiyorum. Bu eski koddur ve neden bu yolu seçtiğini hatırlayamaz (ama bir nedeni olmalı). Bu kod her zaman çalıştı ve müşteri bu hatayı ilk kez rapor ediyor. Sanırım bunu yerine '.Value' olarak değiştireceğim, ancak sorunu anlamak istiyorum ... – NunoRibeiro

cevap

2

olan bir sütun sheet.Column(22).AutoFit() AutoFit çalışıyorum, görünüşe söz konusu hücre. Bir diğer olası-etrafında çalışma GetValue<T>

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

kullanıyor

:

hücre değil null olduğunda sizin için Value.ToString() eserlerin kullanılmasına olduğundan, yeni eklenen boş koşullu sözdizimi kullanarak hata çalışabilirsiniz:

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

Düzenleme: 22-nd sütununda hücresinde bir stil var gibi görünüyor kütüphanenin sayısal bir dizge beklediği sayısal olmayan bir değere sahip. Kütüphane, bir sayı için dizeyi ayrıştırmaya çalışır ve istisnaya neden olur. Hücrenin formatını değiştirerek bu konuda çalışabilirsiniz, ancak asıl düzeltme kütüphaneyi bir istisna atmadan format uyumsuzluklarını algılayacak şekilde değiştirmektir.

+0

Evet 'yerine. 'GetValue 'adlı metniyle (önerdiğiniz gibi) ancak şu anda' sheet.Column (22) .AutoFit()' kullanırken istisna ile karşılaşıyorum: herhangi bir düşünce? – NunoRibeiro

+0

@NunoRibeiro Stili 22'de bir değerin stili ile ilgili yanlış bir şey olmalı. Çünkü stil için orada saklanan her şey, uygulamadaki birden fazla hatayı açığa çıkarıyor gibi görünüyor. – dasblinkenlight

+0

@NunoRibeiro Bu e-tabloyu istediğiniz gibi değiştirebilirseniz, içeriğini stil olmadan yeni bir kopyaya kopyalamayı düşünün ve elde edilen e-tabloda sütunları açıp kapatamayacağınızı görün. – dasblinkenlight

İlgili konular