2013-10-21 68 views
0

我想從java寫一個csv文件。完美的作品,但是當我寫作例如19.4到csv-file,在excel中顯示爲19。4月。所以我在19,4之前放了一個「\」。價值現在顯示爲數字,但我有'在它前面。當我點擊進入Excel中的列並輸入=>'消失。 我必須做什麼,'從一開始就沒有顯示?從java格式化csv列

下面是一些例子源(從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(); 
      } 
     } 
    } 
+0

讓我們看看一些代碼 – Cruncher

回答

1

這不是一個問題CSV,它的Excel的問題。我建議你使用Excel的文本導入嚮導,它會給你選擇如何格式化導入的數據。

CSV只是數據表示格式,沒有關於格式的信息。消費應用程序必須對其進行格式化。如果您需要將數據+元數據存儲在一起,則必須選擇其他格式或嘗試在CSV文件的某處「編碼」元數據(例如,可以使用第一行的CSV文件;但是,我不知道如何指導Excel使用它 - 我用腳本和程序處理所有CSV)。

注意:我有Excel 2007.

0

這是您的輸出嗎?

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

這看起來不像你生成的CSV,你的值的轉義真的很奇怪。你也使用excel的分隔符號「,」在你的數字中,並且是一個奇怪的名字,以便真正地劃分「;」。爲了使它的工作「開箱即用」,它應該是:

First,Second,Third 
19.4,15.1,1.7 

我的建議是使用CSV庫,如傑克遜CSV映射器或OpenCSV。它會自動逃脫你的價值。另外,如果你打算做大文件,你最好創建一個StringBuilder並附加(「vals」)。這是很多更快。