2017-09-14 94 views
0

我收到一個來自供應商的.xlsx文件,它包含一個持續時間爲HH:mm:ss格式的列,當我在Excel中打開文件時顯示爲日期,但實際上應該只是一個字符串。如何在使用ExcelDataReader.CreateReader()時解析DateTime解析中的System.FormatException錯誤?

我想使用ExcelDataReader將這個.xslx文件讀入我的c#應用程序,而無需在運行我的應用程序之前手動修改或刪除列。

FileStream fs = File.Open(extractedFilePath, FileMode.Open, FileAccess.Read); 
var reader = ExcelReaderFactory.CreateReader(fs); 
//I've also tried using ExcelReaderFactory.CreateOpenXmlReader(fs) and get the same error 

然而,當我試圖創建一個閱讀器上面,我得到以下錯誤:

System.FormatException: String was not recognized as a valid DateTime. 
at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) 
at System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style) 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.ConvertCellValue(String rawValue, String aT, String aS) 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.ReadCell(XmlReader xmlReader, Int32 nextColumnIndex) 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.ReadRow(XmlReader xmlReader, Int32 nextRowIndex) 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.<ReadSheetData>d__73.MoveNext() 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.<ReadWorksheetStream>d__71.MoveNext() 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.<ReadWorksheetStream>d__70.MoveNext() 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet.ReadWorksheetGlobals() 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorksheet..ctor(ZipWorker document, XlsxWorkbook workbook, XlsxBoundSheet refSheet) 
at ExcelDataReader.Core.OpenXmlFormat.XlsxWorkbook.<ReadWorksheets>d__45.MoveNext() 
at ExcelDataReader.ExcelDataReader`2.Reset() 
at ExcelDataReader.ExcelOpenXmlReader..ctor(Stream stream, ExcelReaderConfiguration configuration) 
at ExcelDataReader.ExcelReaderFactory.CreateOpenXmlReader(Stream fileStream, ExcelReaderConfiguration configuration) 

有沒有解決這個錯誤的方法嗎?

+0

曾經有指定如何與一個額外的文件讀取列的方式。我多年沒有這樣做,但這可能值得研究。 – user12345

+0

我想說這可能是ExcelDataReader中的一個錯誤。在你的地方,我會向維護者提交一個MCVE的bug。 – Joe

回答