【问题标题】:Having problems reading an Excel spreadsheet using LinqToExcel, when dates are involved当涉及日期时,使用 LinqToExcel 读取 Excel 电子表格时出现问题
【发布时间】:2017-11-28 22:51:14
【问题描述】:

我有一个来自人力资源部门的 Excel 电子表格,需要加载到数据库中。一列中有日期。我在 SO 上搜索了这里并找到了 2 个答案(first one 和 second one),我认为这可能会解决我的问题,但都没有。

首先我尝试简单地打开电子表格:

var excel = new ExcelQueryFactory(@"D:\Projects\LRAT\Example of SPO report 08-25-17 - Copy.xlsx");

我独自离开了第一行。在我为匹配电子表格而定义的类中,我为日期定义了最初的属性,如下所示:

[ExcelColumn("Date Current Step Filed")]
[DefaultValue("")]
public string DateStepsFiled { get; set; }

这行得通,因为列中有多个日期。但是当只有 1 个日期时,LinqToExcel 使用如下值解释它:39758。显然,不是在日期。或者至少没有一个 mm/dd/yyyy 格式。

在阅读我所做的事情时,我得到的印象是第一行,通常是标题行,影响了 LinqToExcel 处理电子表格的方式。我不太明白,因为我认为 LinqToExcel 无论如何都忽略了第一行,但我决定将此列的标题更改为今天的日期,并且我还将 DateStepsFiled 的定义更改为:

[ExcelColumn("Date Current Step Filed")]
[DefaultValue("")]
public DateTime[] DateStepsFiled { get; set; }

这更糟糕,因为 LinqToExcel 现在将所有 DateStepsFiled 定义为 null。那么,我该如何解决这个问题呢?

【问题讨论】:

  • 没关系,我已经发现了问题所在。电子表格很大,所以我没有花时间查看电子表格的所有行。我只是花了一些时间,发现用户,无论出于何种原因,在仅用于日期的列中输入了许多日期,例如 39758 和 39793。我必须回过头来问他们这些值到底是怎么解释的。

标签: c# excel date linq-to-excel


【解决方案1】:

应该是

public DateTime DateStepsFiled { get; set; }

而不是

public DateTime[] DateStepsFiled { get; set; }

【讨论】:

  • 我认为它会是 DateTime[],因为 Excel 电子表格中单元格中的值如下:8/15/2008 9/8/2008 11/13/2008
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多