2012-04-20 90 views
3

我知道我們可以使用Apache POI解析Excel文件並獲取數據。但我聽說過一個奇怪的事情,可以像我們解析CSV一樣傳遞excel文件(就像從文件Stream中讀取文件並用「逗號」分隔符分隔每個列值)。當我們解析Excel時,我們必須使用tab作爲分隔符。可能嗎?如果是的話,爲什麼Apache會提出這樣一個複雜的框架。我感到困惑。有人能幫我嗎?解析沒有Apache POI的Excel文件

回答

4

CSV是一種文本格式,因此它可以使用分隔符進行分析。舊的Excel是一種二進制和專有格式,因此它需要巧妙的解碼。新的Excel格式是壓縮的XML格式,但也應該理解本文檔的結構,然後才能將其轉換爲逐個讀取單元格之類的簡單內容。所以你的問題的答案是否定的,你需要使用Apache POI,並且也沒有什麼問題。

作爲一個便箋,在成爲一名優秀開發人員的道路上,您需要學習在尋求幫助之前做一些自己的研究。把你的手弄髒是學習東西的最好方法。

+0

嘿謝謝你,我盡我最大努力讓自己的手變髒。所有的方式都說我不能做製表符分隔解析。但是,堅持這個的人肯定他在說什麼。這就是爲什麼我尋求你的幫助。 :) – 2012-04-20 15:26:54

+2

有時人們有錯誤的信息,有時這些人固執。給你「製表符分隔」應該是一個「文本文件」。文本文件在記事本中打開。嘗試在記事本中打開Excel文件,看看會發生什麼。 – maksimov 2012-04-20 15:30:23

+0

好吧。感謝您的幫助夥計:) – 2012-04-20 15:32:28

2

你可能已經混淆了你所聽到的或者告訴你的人感到困惑。

Excel文件的某些部分可以作爲CSV文件存儲(有點),因爲表格數據結構完全符合CSV文件格式。但是,如果您以CSV格式保存,那麼您只需在每個單元格中獲取純文本 - 您將丟失所有格式信息,任何圖表,多個工作表等。

原生XLS excel格式是Apache POI使用的格式,因此可以處理excel中的所有內容,而不僅限於某些單元格中的限制性純文本。 CSV文件有它們的用途,但它們絕對不是對普通Excel文件的直接替換。

+0

如果我創建的Office 2003的Microsoft Excel與只包含文本數據的4×4單元文件。然後,如果我在輸入流中讀取文件,並嘗試將「\ t」作爲分隔符。那麼它會在沒有Apache POI的情況下工作嗎? – 2012-04-20 15:18:19

+1

只有在使用CSV時,才使用XLS格式。 – berry120 2012-04-20 15:20:14

+0

明白了!謝謝:) – 2012-04-20 15:31:58

0

我試圖讀取/寫入excel文件,而不使用像POI或任何其他外部JAR文件。我能夠以xls格式編寫文件。這裏是我的代碼

FileWriter fwriter = new FileWriter(file,true); 
writer = new BufferedWriter(fwriter); 
writer.newLine(); 
writer.write("a" + "\t"); 
writer.write("b" + "\t"); 
writer.write("c" + "\t"); 
writer.write("d" + "\t"); 
writer.write("e" + "\t"); 
writer.write("f" + "\t"); 

閱讀文件 這裏是我的代碼讀取

if(file != null) { 
      BufferedReader reader = null; 
      try { 
       reader = new BufferedReader(new FileReader(file)); 
       String line; 
       while((line = reader.readLine()) != null) { 
        String[] component = line.split("\\t"); 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if(reader != null) { 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
+3

這不是一種Excel格式,您正在編寫/閱讀的是製表符分隔的文本文件。只有Excel才能以打開其專有格式的文件的方式打開CSV或TSV。 – maksimov 2016-02-18 20:09:13

0
InputStream is = new FileInputStream(new File(filepath)); 
     StreamingReader reader=null; 
     try { 
      reader = StreamingReader.builder() 
        .rowCacheSize(100)  
        .bufferSize(4096)  
        .sheetIndex(0)   
        .read(is); 
     } catch (Exception e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     }finally{ 
      is.close(); 
     } 
     //pass here to reader and itrate it 
      for (Row row : reader) { 
      if (row.getRowNum()!=0){ 
       for (Cell cell : row) { 
       // write ur logic to store ur value 
       } 

      } 
     }