我在从 Excel 2010 工作表中读取值时遇到一些问题。
在标准 Excel 2010 工作表上,我有一个单元格,其货币格式有两位小数,值 1270,14 €
。
当我在 OpenXML 2.0(C# 代码)上读取此值时,我得到 1270.1400000000001
而不是原始的 1270.14
。
相同格式的任何单元格上的其他值也会发生同样的情况。
从单元格 OpenXML 代码获取值:
private string GetCellValue(string column, int row)
{
column = column.ToUpper();
var targetCell = cells.Where(p => p.CellReference == (column + row)).SingleOrDefault();
var value = String.Empty;
if (targetCell.DataType != null && targetCell.DataType.Value == CellValues.SharedString)
{
var index = int.Parse(targetCell.CellValue.Text);
value = cellValues[index].InnerText.Trim();
}
else
{
if (targetCell.CellValue != null)
{
value = targetCell.CellValue.Text.Trim();
}
else
{
value = null;
}
}
return value;
}
特定值通过 'if' DataType is not null 条件并使用以下行检索值:
value = targetCell.CellValue.Text.Trim();
如何解决这个问题?
为什么甚至可能出现此错误?
最佳答案
由于数字在Excel中是以double形式存储的,所以可以先将string解析为double,再转换回string得到显示的值:
string s = Convert.ToDouble(value).ToString();
让微软自己解决问题。
关于c# - OpenXML 2.0 获取错误的单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728995/