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);
}
// ...
我正在尝试读取如下所示的 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);
}
// ...