OpenXml - 读取 Excel 文件时保留撇号

OpenXml - Preserve apostrophe when reading Excel file

我正在尝试读取如下所示的 Excel 文件:

...使用此示例读取文件

但是当我尝试打印单元格的内容时,它缺少前导撇号并且打印出如下内容:

cell val: 10000001

而不是我所期待的:

cell val: '10000001

有办法实现吗?

前导撇号不被视为单元格值的一部分。这更像是 Excel 使用一些文本而不是数字的约定。

举个例子,假设你想在某个单元格中写入 0001,如果你这样写,MS Excel 会将其解析为数字并将单元格设置为数字 1。
但是,如果您使用前导撇号编写该文本,那么 MS Excel 将保持原样。

无论如何,您可以通过以下方式检测是否应添加前导撇号:

var document = SpreadsheetDocument.Open(filePath, false);
var sharedStringTable = document.WorkbookPart.SharedStringTablePart.SharedStringTable;

var cellFormats = document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats;

// ...

if (cell.DataType == CellValues.SharedString)
{
    bool isQuoted = false;
    if (cell.StyleIndex != null && cell.StyleIndex.HasValue)
    {
        var cellFormat = cellFormats.ChildElements[(int)cell.StyleIndex.Value] as CellFormat;
        isQuoted = cellFormat.QuotePrefix;
    }

    Console.WriteLine("cell val: " + (isQuoted ? "'" : "") + sharedStringTable.ElementAt(Int32.Parse(cellValue)).InnerText);
}

// ...