从java格式化csv列

时间:2013-10-21 12:32:56

标签: java excel csv

我正在尝试从java编写一个csv文件。效果很好,但是当我写作例如19,4到csv文件,在excel中显示为19月4日。所以我在19,4前面放了一个。价值现在显示为数字,但我有'在它前面。当我点击excel中的列并输入=> '消失了。 我该怎么做,'从一开始就没有显示?

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

public void doWork(HttpServletRequest request,HttpServletResponse response){

        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();
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

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

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

注意:我有Excel 2007。

答案 1 :(得分: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”)。 很多更快。