2013-10-21 67 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”)。这是很多更快。