【问题标题】:Read XLSX file in C#在 C# 中读取 XLSX 文件
【发布时间】:2013-05-03 12:16:55
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: c# .net openxml-sdk


    【解决方案1】:

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

    下面的 sn-ps 说明了这一点。注意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));
    

    【讨论】:

    • 感谢您的回复,这是朝着正确方向迈出的一步。问题是我不提前知道单元格值是否是日期。我希望这是在某处的 xlsx 的 xml 文件中指定的。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 2021-08-04
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多