c# - OpenXML 2.0 获取错误的单元格值

标签 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 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/

相关文章:

c# - 如何获取/设置并不总是实现的接口(interface)的属性

c# - 如何将字符串扩展应用于 Func<String>

c# - 在c#中从内存中释放指针

c# - 比较两个图像并使用 emgu cv 库提取差异

c# - 收到有关 Excel 文件内容有问题的消息

c# - 获取程序集路径而不是程序集运行的临时路径

c# - EF 6 对 System.Data.Entity 的依赖

c# - 在 ASP.NET aspx 页面中使用 `<%= "{0}, {1 }", arg1, arg2 %>` 代替 `<%= string.Format("{0}, {1 }", arg1, arg2) %>` 是否有效

c# - openXML电子表格文档返回用于MVC文件下载的字节数组

c# - OpenXmlPowerTools DocumentBuilder 在单独的页面上合并文档