ExcelDataReader:导入XLSX文件,而不将其解析到{System.DateTime}对象中

本文关键字:System DateTime 对象 XLSX 导入 文件 ExcelDataReader | 更新日期: 2023-09-27 18:27:45

我正在使用http://exceldatareader.codeplex.com/.我有一个Excel文件,其中有一列日期,即D/M/Y。我正在尝试使用以下代码读取此文件:

FileStream stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = null;
lock (LockToReadExcelFile)
{
       if (FilePath.EndsWith(".xls", true, System.Globalization.CultureInfo.InvariantCulture))
       {
           excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
       }
       else if (FilePath.EndsWith(".xlsx", true, System.Globalization.CultureInfo.InvariantCulture))
       {
           excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
       }
       else
       {
           return;
       }
}

然后将其添加到数据集中,如下所示:

excelReader.IsFirstRowAsColumnNames = false;
DataSet excelDataTable = excelReader.AsDataSet();

它返回{System.DateTime}对象中的行。我希望他们以System.String格式解析日期数据。(例如,日期2015年11月7日作为7/11/2015 12:00:00 AM {System.DateTime}返回。)

附言:我也试过excelReader.AsDataSet(false);,但效果一样。

ExcelDataReader:导入XLSX文件,而不将其解析到{System.DateTime}对象中

如果您正确使用excel,它会将数字保持为System.Double,将日期保持为System.DateTime,将文本保持为System.String(至少,您可以从.net中看到)。当然,excel用户可以设置单元格的格式,将数字或日期包含为字符串,但这并不正常。所以,读取Excel文件时,您可以将数字设为双精度,将日期设为DateTime等等。非常有用。你可以把它转换成你想要的任何东西,字符串是最简单的。这是您需要的功能的文档页面。要转换为您提到的格式,请使用

dataTimeValue.ToString("G");

首先。。。如何读取Excel文件。。请参阅:https://gist.github.com/Munawwar/924413

其次,这个lib将Datetime字段读取为Double值。如果你想阅读DateTime,你需要做一些投射,如下所示:

double d=double。解析(field_from_excel_datatable);DateTime conv=DateTime.FromOADate(d);

Obs:你可以在这里阅读更多关于上面代码的信息:从Excel表读取日期时间值

祝你好运!