0

我正在尝试从 java 编写一个 csv 文件。完美运行,但是当我将例如 19,4 写入 csv 文件时,在 excel 中它显示为 19. April。所以我在19,4前面放了一个\'。值现在显示为数字,但我前面有 '。当我单击 excel 中的列并输入 => 时,' 消失了。我该怎么办,'从一开始就没有显示?

这是一些示例源(来自 servlet):

公共无效doWork(HttpServletRequest请求,HttpServletResponse响应){

        byte[] fileData = null;
        String buffer = "";

        buffer += "First";
        buffer += ";";
        buffer += "\'";
        buffer += "19,4";
        buffer += ";";
        buffer += "\n";
        buffer += "Second";
        buffer += ";";
        buffer += "\'";
        buffer += "15,1";
        buffer += ";";
        buffer += "\n";
        buffer += "Third";
        buffer += ";";
        buffer += "\'";
        buffer += "1,7";
        buffer += ";";
        buffer += "\n";

        fileData = buffer.getBytes("UTF-8");

        byte[] fileDataWithBOM = new byte[fileData.length+10];
        fileDataWithBOM[0] = (byte)0xef;
        fileDataWithBOM[1] = (byte)0xbb;
        fileDataWithBOM[2] = (byte)0xbf;
        System.arraycopy(fileData, 0, fileDataWithBOM, 3, fileData.length);

        ServletOutputStream out = null;
        String fileName = "Accounting.csv";


        try {
            response.setContentType("text/csv");
            String disposition = "attachment; fileName="+fileName;
            response.setHeader("Content-Disposition", disposition);
            response.setCharacterEncoding("UTF-8");

            out = response.getOutputStream();

            int length = fileData.length;
            response.setContentLength(length);

            out.write(fileData);
            out.flush();
            out.close();

        } catch (Exception e) {
            throw e;
        } finally {
            try {
                if (out != null)
                    out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
4

2 回答 2

1

这不是 CSV 问题,而是 Excel 问题。我建议您使用 Excel 的文本导入向导,它会为您提供如何格式化导入数据的选项。

CSV 只是数据表示格式,没有有关格式的信息。消费应用程序必须对其进行格式化。如果您需要将数据 + 元数据一起存储,则必须选择其他格式或尝试在 CSV 文件中的某处“编码”元数据(例如,可以使用 CSV 文件的第一行;但是,我不知道任何如何指示 Excel 使用它的方式——我使用脚本和程序处理所有 CSV)。

注意:我有 Excel 2007。

于 2013-10-21T13:14:15.860 回答
0

这是你的输出吗?

First;\'19,4;
Second;\'15,1;
Third;\'1,7;

这看起来不像您正在生成 CSV,并且您的值转义真的很奇怪。此外,您正在使用分隔符 excel 期望在您的数字中使用“,”和一个奇怪的分隔符来实际分隔“;”。为了使它“开箱即用”,它应该是:

First,Second,Third
19.4,15.1,1.7

我的建议是使用 CSV 库,例如 Jackson CSV 映射器或 OpenCSV。它会自动转义您的值。此外,如果您打算做大文件,最好创建一个 StringBuilder 并将其附加(“vals”)。它快得多。

于 2013-10-21T13:16:30.370 回答