在c#中读取XLSX文件

本文关键字:XLSX 文件 读取 | 更新日期: 2023-09-27 18:11:49

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

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

我看了一下其他的产品,但是它们似乎都包括字符串和数字,但不包括日期。

有什么想法?

在c#中读取XLSX文件

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

下面的代码片段说明了这一点。注意DateTime.FromOADate overload 的使用
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));

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

话虽这么说,似乎充其量也不太可能确切地知道一个单元格是否是日期,但是通过代码中的一些测试,您可能可以给出一个合理的最佳猜测。

我选择在映射文档中捕获模式信息,因此我可以确定。