0

我有一个我正在尝试使用的 Excel 工作DocumentFormat.OpenXml.Spreadsheet; 簿DocumentFormat.OpenXml.Packaging;

但我不确定如何知道该值何时是日期。共享字符串和数字很好,但与单元格 ( ) 关联的类型Cell.DataType始终是共享字符串。

我看过替代产品,但它们似乎都涵盖了字符串和数字,但不包括日期。

有任何想法吗。?

4

2 回答 2

2

Open XML 将日期存储为从 1900 年 1 月 1 日开始的天数。您需要做的是从单元格中获取字符串,然后将该字符串解析为 DateTime 对象。

下面的片段说明了这一点。注意DateTime.FromOADate重载的使用

public static string GetCellValue(WorkbookPart wbPart, Cell cell)
{
    string value = string.Empty;
    if (cell != null && cell.CellValue != null)
    {
        value = cell.InnerText;
        if (cell.DataType != null)
        {
            switch (cell.DataType.Value)
            {
                case CellValues.SharedString:
                    var stringTable = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
                    if (stringTable != null)
                    {
                        value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
                    }
                    break;

                case CellValues.Boolean:
                    if (value == "0")
                        value = "FALSE";
                    else
                        value = "TRUE";

                    break;
            }
        }
    }
    return value;
}


string value = GetCellValue(wbPart,cell);
var date = DateTime.FromOADate(double.Parse(value));
于 2013-05-01T07:11:51.397 回答
0

我相信我有各种各样的答案。在 Styles 文件中,有一个 dxfs 节点,它带有一个或多个 dxf 节点,用于提供格式。我还没有弄清楚如何从工作表中的单元格到 dxf 节点。但是一旦确定了这种关系,单元格的格式就应该可用。

话虽如此,似乎充其量您不太可能确定单元格是否是日期,但通过代码中的一些测试,您可能会给出合理的最佳猜测。

我选择在映射文档中捕获架构信息,所以我确定。

于 2013-05-03T03:35:52.720 回答