2013-05-03 85 views
6

私は次のコードを持つjava.IでExcelを読み込もうとしています。poiを使ってjavaで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.6jarをインポートしました。 私はこのプログラムを実行しているときに次のエラーメッセージが表示されます。

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 

なぜこのエラーメッセージが表示されるのですか。私はplzを助けます。

+0

も参照してください。この関連[EXA beta5.jar mple](http://stackoverflow.com/a/3562214/230513)[_for-each_](http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html)を使用して、ループ。 – trashgod

答えて

11

xmlbeans-2.3.0.jarファイルをクラスパスに追加します。

+0

私はそのjarファイルをインポートします。しかし、次のエラーが発生しました。msg ...スレッド "main" 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

+7

poi-ooxml-schemas.jarがありません。その瓶はここで最初のヒットです。 – mabi

+1

@mabiとdom4j.jarが提案したように、poi-ooxml-schemas.jarをインクルードしたときに助けてくれてありがとう。 – vijayk

11

jarファイルを次の行を追加します。

  • POI-3.9.jar
  • POI-OOXML-3.9.jar
  • POI-OOXML-スキーマ-3.7.jar
  • のXMLBeans-2.3.0
  • のdom4j-1.6.1.jar
+0

上記のすべてのjarファイルをjavaで読み書きする必要があります。 1つのjarファイルが見つからなくても実行時エラーになります。 –

1

の.jar

を追加します。
xmlbeans-2.3.0.jar 
dom4j-1.6.1.jar 

通常のPOIのXMLと一緒に、それは確かに問題を解決します。

-1

次のjarsを追加してクラスパスに追加し、プロジェクトを実行します。

  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〜
  6. POI-OOXML-スキーマ-3.9.jar
  7. のXMLBeans-2.3.0.jar
+0

http://poi.apache.org/faqに準拠しています。html#faq-N10204バージョン間でPOIジャーが混在しているため、これは*サポートされていません。また、なぜあなたは今日誰かにPOIの古いバージョンを使用するように提案していますか? – Gagravarr

+0

私はすべての推奨ジャーを試してみましたが、動作しませんでした。だから私は上記のすべての瓶を試して、それは今動作します。 –

+0

以下の行をメインメソッドに追加し、例外を受け取らないようにします。 - > BasicConfigurator.configure(); –

関連する問題