【问题标题】:How do Excel recognize Date cells and how to do the same using OpenXml and C#Excel 如何识别日期单元格以及如何使用 OpenXml 和 C#
【发布时间】:2013-02-25 13:07:18
【问题描述】:

我已经花了几个小时,但仍然没有满意的答案。

当我单击 excel 文档中的单元格时,它被标记为日期字段。但是,如果我使用 OpenXml 来调查 DateType - 我将收到 DataType 为 NULL 的 Cell 对象。我注意到,在这种情况下,Cell.StyleIndex 设置为“116”,但我想保证,我将始终以与 Excel 相同的方式识别日期单元格。如何获取指示日期字段的数据样式索引的完整列表?

    public bool IsDateCell(Cell cell)
    {
        switch (cell.StyleIndex.Value)
        {
            case 116: return true;
            case 98: return true;
            case 283: return true;
            case 282: return true;
            default: return false;
        }
    }

【问题讨论】:

  • 我没有使用过 c# - 但请注意 Excel 在内部将日期存储为普通数字,即浮点数 - 作为自 1900 年 1 月 1 日以来经过的天数。所以也许你需要寻找这反而...
  • 但是如果 DataType 为 null 并且单元格中的值类型不是 Date 怎么办?例如,4000 不可​​能是自 1900 年 1 月 1 日以来的时间,而是正常数字?
  • 我不知道某处是否有任何“这是一个日期”标志,不要这么认为。您可以检查数字是否在有效范围内(例如 41330(今天)+/- 1000) - 以及单元格的格式是否为日期...

标签: c# excel openxml


【解决方案1】:

我认为问题在于 OPENXML 如何决定单元格的类型。 至少我知道 OLEDEB 中存在类似的问题。 通常它是通过读取列中的前几个值来实现的。

您可以做的是在将值输入到 Excel 之前将格式定义为日期, 或使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ -->TypeGuessRows。 见:

OleDB & mixed Excel datatypes : missing data

DBNull in non-empty cell when reading Excel file through OleDB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多