繁体   English   中英

在C#中读取XLSX文件

[英]Read XLSX file in C#

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

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

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

有任何想法吗。?

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));

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

话虽如此,似乎充其量,你不太可能确定一个单元格是否是一个日期,但是在代码中进行了一些测试,你可能会给它一个合理的最佳猜测。

我选择在映射文档中捕获模式信息,所以我肯定知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM