【问题标题】:OpenXml - Preserve apostrophe when reading Excel fileOpenXml - 读取 Excel 文件时保留撇号
【发布时间】:2020-06-29 15:05:25
【问题描述】:

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

...使用此示例读取文件https://stackoverflow.com/a/26063965/281451

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

cell val: 10000001

而不是我所期待的:

cell val: '10000001

有没有办法做到这一点?

【问题讨论】:

    标签: c# excel openxml-sdk


    【解决方案1】:

    前导撇号不被视为单元格值的一部分。这更像是 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);
    }
    
    // ...
    

    【讨论】:

    • 谢谢,这很完美,正是我想要的。非常有用的解释,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2023-03-26
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多