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

时间:2015-12-21 12:22:05

标签: c# excel datetime exceldatareader

我正在使用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;
       }
}

然后将其添加到DataSet,如下所示:

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

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

PS:我也试过了excelReader.AsDataSet(false);,但结果相同。

2 个答案:

答案 0 :(得分:0)

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

dataTimeValue.ToString("G");

答案 1 :(得分:0)

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

其次,此lib将Datetime fiels读为Double值。如果你想读作DateTime,你需要做一些演员表,如下所示:

double d = double.Parse(field_from_excel_datatable); DateTime conv = DateTime.FromOADate(d);

Obs:您可以在此处详细了解上述代码:Reading Datetime value From Excel sheet

祝你好运!