2017-09-14 95 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

回答