2013-05-03 63 views
6

我想在java.I中读取excel有以下代码。如何在Java中使用poi读取excel(.xlsx)?

import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Iterator; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.DateUtil; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class Test { 
    public static void main(String[] args) throws IOException { 
     String fname = "D:\\Test.xlsx"; // or "C:\\Test.xls" C:\\SDI-XL.xls 
     InputStream inp = new FileInputStream(fname); 
     Workbook wb = new XSSFWorkbook(inp); // Declare XSSF WorkBook 
     Sheet sheet = wb.getSheetAt(0); // sheet can be used as common for XSSF and HSSF 

     Iterator<Row> rows=sheet.rowIterator(); 
     while (rows.hasNext()) { 
      Row row = (Row) rows.next(); 
      System.out.println("row#=" + row.getRowNum() + ""); 
      Iterator cells = row.cellIterator(); 
      while (cells.hasNext()) { 
       Cell cell = (Cell) cells.next(); 

       switch (cell.getCellType()) { 
       case Cell.CELL_TYPE_STRING: 
        System.out.println(cell.getRichStringCellValue().getString()); 
        break; 
       case Cell.CELL_TYPE_NUMERIC: 
        if (DateUtil.isCellDateFormatted(cell)) { 
         System.out.println(cell.getDateCellValue() + ""); 
        } else { 
         System.out.println(cell.getNumericCellValue()); 
        } 
        break; 
       case Cell.CELL_TYPE_BOOLEAN: 
        System.out.println(cell.getBooleanCellValue() + ""); 
        break; 
       case Cell.CELL_TYPE_FORMULA: 
        System.out.println(cell.getCellFormula()); 
        break; 
       default: 
       } 
      } 
     } 
     inp.close(); 
    } 
} 

我导入了poi.3.6jar和poi.ooxml-3.6 jar。 当我运行这个程序时,我收到以下错误消息。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException 
    at Test.main(Test.java:16) 
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 1 more 

我不明白为什么这个错误消息come.So plz帮助我。

+0

另见本相关[EXA使用[_for-each_](http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html)(http://stackoverflow.com/a/3562214/230513)循环。 – trashgod 2013-05-03 11:31:39

回答

11

xmlbeans-2.3.0.jar文件添加到您的类路径中。

+0

我导入该jar。但我有以下错误msg..Exception在线程“主”java.lang.NoClassDefFoundError:org/openxmlformats/schemas/spreadsheetml/x2006/main/CTSheet \t at Test.main(Test.java: 16) 引起:java.lang.ClassNotFoundException:org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet – vijayk 2013-05-03 11:37:25

+7

你缺少poi-ooxml-schemas.jar,请至少谷歌这样的错误;罐子是这里的第一个命中。 – mabi 2013-05-03 11:40:51

+1

感谢您的帮助,当我按照@mabi和dom4j.jar的建议包含poi-ooxml-schemas.jar时,它很有用。 – vijayk 2013-05-03 11:52:41

11

添加以下jar文件:

  • POI-3.9.jar
  • POI-OOXML-3.9.jar
  • POI-OOXML-架构 - 3.7.jar
  • 的xmlbeans-2.3.0的.jar
  • 的dom4j-1.6.1.jar
+0

您需要以上所有jar来读取/写入java中的excel文件。即使缺少一个罐子,您也会因运行时错误而失败。 – 2015-12-01 11:21:58

1

添加

xmlbeans-2.3.0.jar 
dom4j-1.6.1.jar 

随着定期POI XMLs,它一定会解决这个问题。

-1

添加以下jar并将它们添加到您的classpath中,然后运行您的项目。

  1. DOM4J-1.6.1-sources.jar
  2. dom4j.jar
  3. 的log4j-1.2.17.jar
  4. POI-3.5 FINAL.jar
  5. POI-OOXML-3.5- beta5.jar
  6. POI-OOXML-架构 - 3.9.jar
  7. 的xmlbeans-2.3.0.jar
+0

根据http://poi.apache.org/faq。html#faq-N10204这是*不支持*,因为您在版本之间混合POI JAR。此外,为什么你今天要向某人建议使用这种老版本的POI? – Gagravarr 2017-02-27 14:07:51

+0

我尝试用最新版本的所有推荐的罐子,但没有奏效。所以我尝试了所有以上的罐子,现在它工作。 – 2017-03-01 04:22:42

+0

在你的主要方法中加入下面的一行不会得到异常 - > BasicConfigurator.configure(); – 2017-03-01 04:25:13

相关问题