2012-04-24 132 views
1

好的,我檢查了this SO question,但它一點都沒有幫到我。使用csv文件格式化問題

我需要爲用戶獲取一個csv文件,以便他們可以將其導出到PeopleSoft中。其中一個字段(batch_id)必須是4位數字,並且當前Excel會不斷刪除這些前導零。我還在TextPad中打開了csv文件,並驗證了這些零值已經消失。

因此,繼承人過程:

瀏覽器指向的myapp /批次/當然,如下所示:

@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具有正確的數字位數)。然後將該XML通過StringBuffer.append()處理成一個長逗號分隔的String,然後該方法返回。 @Produces屬性使用該字符串並確保Excel處理它,並下載文件。

我可以通過在每個逗號後添加製表符來使其顯示爲4位數,但是當它加載到PeopleSoft中時,它會炸彈。如果我單引號引用它(無論是單引號還是引用整個batch_id),我還可以使其顯示正確的4位數字,但又會出現PeopleSoft上傳的問題。

更多信息:我追加數據,這樣的(但在一個循環中):

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

沒有人有任何想法如何讓Excel以正確的行爲?

編輯:我標記了一個解決方案,因爲在任何其他情況下,它會工作。試圖將數據吐出到Excel就像我現在只是一個混亂,所以我只是要改寫它不同的方式。

回答

0

您可以在Excel中打開該文件而不會丟失零。

執行如下操作:

1 - 打開Excel; 2 - 單擊 - 文件 - >導入並選擇要在Excel中查看的CSV文件; 3 - 選擇分隔符並單擊下一步; 4 - 選擇逗號作爲分隔符,然後單擊下一步; 5 - 將列數據標記爲文本,不希望丟失左側的零; 6 - 完成。

0

將文件保存在本地,然後直接用TextPad打開它,前導零將在那裏。

不要在Excel中打開CSV文件。 Excel將重新格式化它並去掉前導零。

親自試一試,在TextPad中手工製作一個簡單的CSV文件,保存它,然後在Excel中打開它。前導零將被剝離。

如果您需要在Excel中正確打開它,請使用專爲Excel設計的格式。 讓用戶下載XLS文件或XLSX文件。像Apache POI http://poi.apache.org/spreadsheet/quick-guide.html這樣的圖書館是一個很好的開始。

+0

在這種情況下,那些前導零不會在那裏,我檢查過。如果我將方法標題更改爲text/plain並將文件擴展名更改爲.txt,則無論有多少次我來回更改擴展名,零都在那裏。 這應該只是一個快速和骯髒的解決方案,以獲得數據到Excel,但它看起來可能不會工作。 – Corwin01 2012-04-25 12:45:50