如何获取openxml.spreadsheet.cell屏幕显示值

How to get the openxml.spreadsheet.cell screen display value

我有一个 C# 应用程序,它读取在 Excel 2013

中创建的上传的 excel 文件 (.xslx)

我使用 C# openxml 库读取每个单元格,将每个单元格放入每个行集合的单元格集合中。

除了不能正确读取格式化的 excel 单元格值外,代码工作正常。

单元格在 excel 中的显示方式如下:

和来自攻击:

当 C# 应用程序读取该单元格时,我检查了该单元格的 DocumentFormat.OpenXml.Spreadsheet.Cell cell 属性,但是单元格属性的 none 等于我想要的 May-15 的值。

我注意到 cell.DataType 和 cell.CellFormula 都是空的,所以它们不能用来确定格式。

cell.InnerText 值为“42125”。如果我将 Excel 中的单元格格式更改为常规,则它显示为 42125.

我正在使用 this 文章

中的代码

这是我正在使用的代码片段

for (var i = 0; i < rows.Count; i++)
{
    var dataRow = new List<string>();
    data.DataRows.Add(dataRow);
    var row = rows[i];
    var cellEnumerator = GetExcelCellEnumerator(row);
    while (cellEnumerator.MoveNext())
    {
        var cell = cellEnumerator.Current; //return the current DocumentFormat.OpenXml.Spreadsheet.Cell
        var text = ReadExcelCell(cell, workbookPart).Trim();
        dataRow.Add(text);
    }
}

.

private string ReadExcelCell(Cell cell, WorkbookPart workbookPart)
{
    var cellValue = cell.CellValue;
    var text = (cellValue == null) ? cell.InnerText : cellValue.Text;
    if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
    {
        text = workbookPart.SharedStringTablePart.SharedStringTable
            .Elements<SharedStringItem>().ElementAt(
                Convert.ToInt32(cell.CellValue.Text)).InnerText;
    }

    return (text ?? string.Empty).Trim();
}

问题:

  1. 如何读取5月15日cell.InnerText的显示值?

  2. 如果格式为嗯嗯?

第二个问题的答案:

如何将 42125 转换为 May-15

var myval = String.Format("{0:MMM-yy}", DateTime.FromOADate(42125));

将 May-15 转换为 42125

var myval =  DateTime.ParseExact("May-15", "MMM-yy", System.Globalization.CultureInfo.InvariantCulture).ToOADate();