ExcelDataReader 数据类型"date"被转换



以下代码从 Excel 文件中读取数据:

        string path = "testtable.xls";
        FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
        IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
        excelReader.IsFirstRowAsColumnNames = true;
        DataSet result = excelReader.AsDataSet();
        foreach (DataTable Table in result.Tables)
        {
            for (int i = 0; i < Table.Rows.Count; i++)
            {
                for (int j = 0; j < Table.Columns.Count; j++)
                {
                    dataGrid1.ItemsSource = new DataView(Table);
                }
            }
        }

这适用于每一列,除了带有"日期"的列。

在 excel 表中,我以 dd.mm.yy 指定了日期,但在我的网格视图中,我得到类似的东西:42781 而不是 15.02.2017

有人知道这个问题的解决方案吗?谢谢

当您阅读 excel 时,您正在阅读日期的内部表示形式。42781 是内部表示形式(正弦 1/1/1900 天数)。因此,您需要使用DateTime.FromOADate转换为日期。

就你而言,恐怕你不能按原样绑定你的桌子。(顺便问一下,为什么每次都遍历列/行并设置绑定?您只需要绑定一次表。无论如何,您可能需要更改表或创建一个具有转换值的新表。或者可能有某种可以使用的价值转换器

我找到了一个解决方案。更改这两行后,它可以工作。

IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream, true);
DataSet result = excelReader.AsDataSet(true);

  DataSet result = excelReader.AsDataSet(true);

上面的代码行也给出了转换后的时间(05/23/2017 12:00 AM)

您也可以像这里描述的那样计算偏移量。

 public static DateTime FromExcelDate(double value)
 {
     return new DateTime(1899, 12, 30).AddDays(value);
 }

最新更新