ExcelDataReader数据types“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); } } } 

这适用于每个列就好了,除了有“date”的列。

在excel表中,我在dd.mm.yyyy中指定了date,但是在我的gridview中,我得到了如下所示的内容: 42781而不是15.02.2017

有没有人知道这个问题的解决scheme? 谢谢

我find了解决scheme。 改变这两条线后,它的作品。

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

当你阅读excel时,你正在阅读一个date的内部表示。 42781是内部表示法(天正弦1/1/1900)。 所以你需要使用DateTime.FromOADate转换为date。

在你的情况,恐怕你不能绑定你的桌子。 (顺便说一句,为什么你遍历列/行,并设置绑定每次?你只需要绑定一次表)。 无论如何,你可能需要改变表somhow或创build一个新的表与转换值。 或者可能有某种价值转换器可以使用

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

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

DataSet result = excelReader.AsDataSet(true);

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