OpenXML 2.0获取错误的单元格值

时间:2012-01-04 15:04:17

标签: c# .net-4.0 openxml openxml-sdk excel-2010

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不为null条件并使用以下行检索值:

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

如何解决这个问题?

为什么这个错误甚至可能?

2 个答案:

答案 0 :(得分:2)

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

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

让微软处理自己的问题。

答案 1 :(得分:1)

虽然它可能不适合您的应用程序,但最简单的修复方法是简单地舍入您获得的值并将其分配或在适用的情况下返回。 somevarhere=Math.Round(Convert.ToDouble(value), 2)