2013-05-03 17 views
6

Próbuję przeczytać excel w java.Mam następujący kod.Jak czytać program Excel (.xlsx) w języku Java za pomocą poi?

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(); 
    } 
} 

Zainstalowałem plik jar poi.3.6jar i poi.ooxml-3.6. Po uruchomieniu tego programu pojawia się komunikat o błędzie.

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 

Nie rozumiem dlaczego ten komunikat o błędzie przychodzi.Także mi pomóc.

+0

Zobacz również ten związany [exa mple] (http://stackoverflow.com/a/3562214/230513) używając [_for-every_] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html) pętle. – trashgod

Odpowiedz

11

dodaj plik xmlbeans-2.3.0.jar do swojej ścieżki klas.

+0

Importuję ten jar., Ale mam następujący błąd msg..Exception w wątku "main" java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTSheet \t at Test.main (Test.java: 16) Powodowane przez: java.lang.ClassNotFoundException: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet – vijayk

+7

brakuje Ci poi-ooxml-schemas.jar, proszę przynajmniej Google takie błędy; słoik jest tu pierwszym hitem. – mabi

+1

Dzięki za pomoc, zadziałało, gdy dodałem poi-ooxml-schemas.jar zgodnie z sugestiami @mabi i dom4j.jar. – vijayk

11

dodać pliki jar następujący:

  • poi-3.9.jar
  • poi-OOXML-3.9.jar
  • POI-OOXML-schematy-3.7.jar
  • XMLBeans-2.3.0 JAR
  • dom4j-1.6.1.jar
+0

Potrzebne są wszystkie powyższe słoiki do odczytu/zapisu pliku excel w java. Spowoduje to błędy w czasie wykonywania, nawet jeśli brakuje jednego słoja. –

1

Dodaj

xmlbeans-2.3.0.jar 
dom4j-1.6.1.jar 

wraz ze zwykłymi plikami XML POI, to na pewno rozwiąże problem.

-1

Dodaj kolejne słoiki i dodaj je do swojej klasy, a następnie uruchom projekt.

  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-schematy-3.9.jar
  7. XMLBeans-2.3.0.jar
+0

Zgodnie z http://poi.apache.org/faq.html # faq-N10204 to * nie jest obsługiwane * podczas mieszania słoików POI między wersjami. Poza tym, dlaczego, do licha, sugerujesz komuś dziś, aby używała starych wersji UM? – Gagravarr

+0

Próbowałem ze wszystkimi zalecanymi słoikami z najnowszą wersją, ale nie działałem. Wypróbowałem wszystkie powyższe słoiki i teraz działa. –

+0

Dodaj poniżej linii w głównej metodzie, aby nie uzyskać wyjątku -> BasicConfigurator.configure(); –

Powiązane problemy