1

好的,我已经检查了这个 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 处理为一个用逗号分隔的长字符串,然后该方法返回该字符串。@Produces 属性获取该字符串并确保 Excel 处理它,并下载文件。

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

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

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

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

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

4

2 回答 2

0

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

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

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

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

于 2012-04-25T01:19:31.697 回答
0

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

执行以下操作:

1 - Open Excel; 2 - Click - File->Import and Select the CSV File you want to view in Excel; 3 - Select Delimited and Click Next; 4 - Select Comma as Delimiter and click Next; 5 - Mark Column Data as Text at the column you don't want to lose the zeroes on the left; 6 - Finish.

于 2012-04-25T01:31:22.243 回答