OpenXML 2.0获取错误的单元格值

本文关键字:单元格 取错误 获取 OpenXML | 更新日期: 2023-09-27 18:19:37

我在从Excel2010工作表中读取值时遇到了一点问题。

在标准Excel 2010工作表中,我有一个单元格,货币格式为小数点后两位,值为1270,14 €

当我在OpenXML2.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不是null条件,并使用以下行检索值:

value = targetCell.CellValue.Text.Trim();

如何修复

为什么会出现这种错误

OpenXML 2.0获取错误的单元格值

由于数字在Excel中以double形式存储,您可以首先将字符串解析为double,然后转换回字符串以获得要显示的值:

    string s = Convert.ToDouble(value).ToString();

让微软自己解决问题。

虽然它可能不适合您的应用程序,但最简单的解决方法是将返回的值四舍五入,并在适用的情况下进行赋值或返回。somevarhere=Math.Round(Convert.ToDouble(value), 2)