Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenXml-读取Excel文件时保留撇号_C#_Excel_Openxml Sdk - Fatal编程技术网

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

C# OpenXml-读取Excel文件时保留撇号,c#,excel,openxml-sdk,C#,Excel,Openxml Sdk,我正在尝试读取一个Excel文件,该文件如下所示: …使用此示例读取文件 但是当我试图打印单元格的内容时,它缺少了前面的撇号,它打印出如下内容: cell val:10000001 而不是我所期望的: cell val:'10000001 有没有办法做到这一点?前面的撇号不被认为是单元格值的一部分。这更像是Excel使用一些文本而不是数字的惯例 举个例子,假设您想在某个单元格中写入0001,如果您这样写,MS Excel会将其解析为一个数字,并将单元格设置为数字1。 但是,如果您使用前导撇号编

我正在尝试读取一个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);
}

// ...

谢谢,这正是我想要的。也很有帮助的解释,,