OpenXML 2.0 获取错误的单元格值

Gil*_*Gil 4 c# .net-4.0 openxml excel-2010 openxml-sdk

我在从Excel 2010 工作表读取值时遇到一些问题。

\n\n

在标准 Excel 2010 工作表上,我有一个单元格,其货币格式带有两位小数和 value 1270,14 \xe2\x82\xac

\n\n

当我在 OpenXML 2.0(C# 代码)上读取此值时,我得到的1270.1400000000001不是原始的1270.14.

\n\n

对于具有相同格式的任何单元格上的其他值,也会发生同样的情况。

\n\n

从单元格 OpenXML 代码中获取值:

\n\n
private string GetCellValue(string column, int row)\n{\n    column = column.ToUpper();\n    var targetCell = cells.Where(p => p.CellReference == (column + row)).SingleOrDefault();\n\n    var value = String.Empty;\n\n    if (targetCell.DataType != null && targetCell.DataType.Value == CellValues.SharedString)\n    {\n        var index = int.Parse(targetCell.CellValue.Text);\n        value = cellValues[index].InnerText.Trim();\n    }\n    else\n    {\n        if (targetCell.CellValue != null)\n        {\n            value = targetCell.CellValue.Text.Trim();\n        }\n        else\n        {\n            value = null;\n        }\n    }\n\n    return value;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

特定值传递“if”DataType 不为空条件并使用以下行检索值:

\n\n

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

\n\n

如何解决这个问题?

\n\n

为什么这个错误可能发生?

\n

Siu*_*Fay 5

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

    string s = Convert.ToDouble(value).ToString();
Run Code Online (Sandbox Code Playgroud)

让微软自己解决自己的问题。