【问题标题】:Excel does not display zero decimal when opening an exported CSV file打开导出的 CSV 文件时 Excel 不显示零小数
【发布时间】:2015-08-25 12:59:44
【问题描述】:

我正在尝试导出内容类型错误的 CSV 文件,以便在 Excel 中打开它。当对象的值为 2.0 时,在 Excel 工作表中它只显示 2。它只是省略了十进制值。当值为 2.1、2.2 等时,它工作正常。

2.0、3.0的时候问题就来了。

    StringBuffer sb= new StringBuffer();
        sb.append("2.0");

        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext()
                .getResponse();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=Test.csv");
        response.getOutputStream().write(sb.toString().getBytes(Charset.forName("UTF-8")));
        response.getOutputStream().flush();
        response.getOutputStream().close();
        FacesContext.getCurrentInstance().responseComplete();

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 我在 Excel 中找不到您输入的代码。
  • response.getOutputStream().write(sb.toString().getBytes(Charset.forName("UTF-8")));
  • 这似乎是 Excel“问题”而不是 Java 问题。

标签: java excel csv decimal


【解决方案1】:

问题与在 excel 中而不是 java 中的渲染有关。

在您的 Excel 文档中,

右键单击单元格>设置单元格格式>从类别中选择“数字”

您会看到十进制格式的数字。

【讨论】:

    【解决方案2】:

    您可以使用此代码:

       sb.append("\"2.0\"");
    

    我经常使用更冗长的,强制文本格式:

       sb.append("=\"2.0\"");
    

    (见https://stackoverflow.com/a/165052/476791

    要验证此解决方案是否可以打开记事本,输入="2.0",在桌面上将其另存为Test.csv,然后双击它。

    【讨论】:

    • 仍然显示 2 而不是 2.0
    • 非常感谢 slartidan。现在一切正常。
    • 非常感谢 slartidan。现在一切正常
    猜你喜欢
    • 2016-11-29
    • 2017-01-15
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    相关资源
    最近更新 更多