【问题标题】:Date changed into number when i fetch value from excel当我从 excel 中获取值时,日期变为数字
【发布时间】:2016-06-09 13:52:01
【问题描述】:

我有一个包含很多字段的 excel 文件。我使用数据集来存储从这个 excel 文件中获取的数据。在 excel 表中,我有一个设置为正确格式的日期列。但是在检索时,格式会更改为数据集中的数字..

我不知道这个问题的原因。

Excel 值:01/12/2015,在数据集中更改为 42016。

任何指向此问题的指针将不胜感激。

我的代码是

  private static DataSet GetExcelDataAsDataSet(string path)
        {

            return GetExcelDataReader(path).AsDataSet();
        }

        private static IExcelDataReader GetExcelDataReader(string path)
        {
            FileStream stream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read);


            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

            var data = excelReader.ResultsCount;
            DataSet result = excelReader.AsDataSet();


            excelReader.IsFirstRowAsColumnNames = true;

            return excelReader;
        }

【问题讨论】:

  • 能否提供代码sn-p,将excel中的数据填充到数据集中?
  • 原因是您将这些值作为 VBA 的数字表示来检索,而不是作为日期值。但如果没有您的代码,我们无法建议如何改变这种行为。

标签: c# excel datetime dataset


【解决方案1】:

正如this answer 中所解释的,它就像使用一样简单:

public static DateTime FromExcelSerialDate(int SerialDate)
{
    if (SerialDate > 59) SerialDate -= 1; //Excel/Lotus 2/29/1900 bug   
    return new DateTime(1899, 12, 31).AddDays(SerialDate);
}

您得到的数字是自 1900 年 1 月 1 日以来经过的天数,因此该函数就是您的答案:)

你也可以使用DateTime dt = DateTime.FromOADate(NUMBER);,我认为从this answer中提取它会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多