具有 Open XML 的 Net core。在我的 Excel 中,值是 100%。我正在尝试阅读如下
获取单元格值方法
public static string GetCellValue(SpreadsheetDocument doc, Cell cell)
{
if (cell.CellValue != null)
{
string value = cell.CellValue.InnerText;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
return doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.ElementAt(int.Parse(value)).InnerText;
}
else
{
return value;
}
}
return string.Empty;
}
获取单元格方法
public static Cell GetCell(Worksheet worksheet, string columnName, uint rowIndex)
{
Row row = worksheet.GetFirstChild<SheetData>().Elements<Row>().FirstOrDefault(r => r.RowIndex == rowIndex);
if (row != null)
{
return row.Elements<Cell>().FirstOrDefault(c => string.Compare(c.CellReference.Value, columnName + rowIndex, true) == 0);
}
return null;
}
我正在阅读如下。
var data = OpenXmlReader.GetCellValue(spreadsheetDocument, OpenXmlReader.GetCell(workSheet, "E", 11));
数据为 1,而我的 Excel 中的实际值为 100%。我不知道为什么这不能正确阅读。有人可以帮帮我吗?任何帮助,将不胜感激。谢谢
在Excel中,单元格的显示格式和实际存储的数据格式可能不同。当您在百分比格式的单元格中输入 75% 时,Excel 将其存储为小数,但在显示时,它仍然显示为百分比。
我们可以从Open XML中读取这样配置的格式,可以看到读取到的
NumberFormatId
是43,FormatCode
是"_ * #,##0.00_ ;_ * \\-#,##0.00_ ;_ * \"-\"??_ ;_ @_ "
但是,在 NumberFormatId list 中预定义的格式中并没有找到这种格式。所以我们可以使用 OpenXml 为返回值设置相应的格式。这里有一个例子供大家参考:
public static string GetCellValue(SpreadsheetDocument doc, Cell cell)
{
if (cell.CellValue != null)
{
string value = cell.CellValue.InnerText;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
return doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.ElementAt(int.Parse(value)).InnerText;
}
else if (cell.StyleIndex != null)
{
var styleIndex = (int)cell.StyleIndex.Value;
var cellFormat = (NumberingFormat)doc.WorkbookPart.WorkbookStylesPart.Stylesheet.NumberingFormats.ElementAt(styleIndex);
var numberFormat = doc.WorkbookPart.WorkbookStylesPart.Stylesheet.NumberingFormats.Elements<NumberingFormat>()
.Where(i => i.NumberFormatId.ToString() == cellFormat.NumberFormatId.ToString()).FirstOrDefault().FormatCode;
if (numberFormat != null )
{
var cellValue = double.Parse(value);
value = (cellValue * 100).ToString("0.00") + "%";
}
}
return value;
}
return string.Empty;
}
返回数据: