格式化csv文件的问题

时间:2012-04-24 21:45:18

标签: java excel csv jersey jax-rs

好的,我已经检查了this SO question,但它根本没有帮助我。

我需要向用户提供csv文件,以便将其导出到PeopleSoft。其中一个字段(batch_id)必须是4位数,并且当前Excel不断删除那些前导零。我还在TextPad中打开了csv文件,并验证这些零已经消失了。

所以继续这个过程:

浏览器指向myapp / Batch / course,如下所示:

    @GET
    @Path( "Batch/{course}" )
    @Produces( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )
    @HttpHeader( values="Content-Disposition=attachment;filename=Batch.csv" ) 
    public String getNextBatch ( @PathParam( "course" ) String course )
    {
      ...
    }

在该方法中,查询Oracle数据库并将数据作为XML发回(在XML中,batch_id具有正确的位数)。然后通过StringBuffer.append()将该XML处理为一个长逗号分隔的String,然后该方法返回。 @Produces属性获取该String并确保Excel处理它,并下载文件。

我可以通过在每个逗号后添加制表符使其显示为4位数,但是当它加载到PeopleSoft时会爆炸。如果我单引号(或者引用一个引号,或者引用整个batch_id),我也可以使用正确的4位数来显示它,但同样也是PeopleSoft上传的问题。

更多信息:我正在追加数据(但是在循环中):

    NodeList participants = XmlUtil.selectNodeList( doc, "Batch/row" );
    buffer.append( "\t" + item.getAttribute( "batchid" ) );

有没有人知道如何让Excel正常运行?

编辑:我标记了一个解决方案,因为在任何其他情况下它都会起作用。试图像我现在一样将数据吐出到Excel只是一个笨蛋,所以我只是以不同的方式重写它。

2 个答案:

答案 0 :(得分:0)

在本地保存文件,然后直接用TextPad打开它,前导零将在那里。

不要在Excel中打开CSV文件。 Excel将重新格式化并删除前导零。

自己尝试一下,在TextPad中手工制作一个简单的CSV文件,保存,然后在Excel中打开它。前导零将被剥离。

如果需要在Excel中正确打开,请使用专为Excel设计的格式。 让用户下载XLS文件或XLSX文件。像Apache POI http://poi.apache.org/spreadsheet/quick-guide.html这样的图书馆是一个很好的起点。

答案 1 :(得分:0)

您可以在excel中打开该文件而不会丢失零。

请执行以下操作:

1 - 打开Excel; 2 - 单击 - 文件 - >导入并选择要在Excel中查看的CSV文件; 3 - 选择“分隔”并单击“下一步”; 4 - 选择逗号作为分隔符,然后单击下一步; 5 - 在您不希望丢失左边的零的列中将列数据标记为文本; 6 - 完成。