2012-04-20 87 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 
       } 

      } 
     }