C# Excel如何识别日期单元格,以及如何使用OpenXml和C进行识别#

C# Excel如何识别日期单元格,以及如何使用OpenXml和C进行识别#,c#,excel,openxml,C#,Excel,Openxml,我已经花了几个小时,但仍然没有令人满意的答案 当我单击excel文档中的单元格时,它被标记为日期字段。然而,如果我使用OpenXml调查DateType,我将收到数据类型为NULL的Cell对象。我注意到,在本例中,Cell.StyleIndex设置为“116”,但我想保证,我将始终以与Excel相同的方式识别日期单元格。如何获得指示日期字段的数据样式索引的完整列表 public bool IsDateCell(Cell cell) { switch (cell.

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

当我单击excel文档中的单元格时,它被标记为日期字段。然而,如果我使用OpenXml调查DateType,我将收到数据类型为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;
        }
    }

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

您可以在将值输入excel之前将格式定义为日期, 或者使用HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel \-->TypeGuessRows。 见:


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