2011-05-04 27 views
94

estoy haciendo referencia a la versión 3.7 del POI Apache y estoy recibiendo un error de "no se puede resolver" cuando lo haga:no puede importar XSSF en Apache POI

import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

Otras declaraciones de importación que hacen referencia PDI NO HACER dame errores, tales como:

import org.apache.poi.ss.usermodel.*; 

Alguna idea ??

Respuesta

157

Para que OOXML funcione, necesita el contenedor POI-OOXML que se empaqueta por separado del contenedor de POI.

Descargar el frasco POI-OOXML de la siguiente ubicación -

http://repo1.maven.org/maven2/org/apache/poi/poi-ooxml/3.11/poi-ooxml-3.11.jar

Para Maven2 añadir el siguiente dependencia -

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.11</version> 
</dependency> 
+0

Esto es lo que necesitaba. Para mí (versión 3.11) simplemente necesitaba agregar un jar adicional: poit-ooxml-3.11-20141221.jar. No me di cuenta de que no había empate entre ellos. Gracias por la respuesta Pushkar +1. –

+0

Gracias @Pushkar – Binay

28

Las clases para los formatos de archivo OOXML (como XSSF de .xlsx) están en un archivo jar diferente. Debe incluir el contenedor poi-ooxml en su proyecto, junto con las dependencias

Puede obtener una lista de todos los componentes y sus dependencias en el sitio web de POI here.

Lo que probablemente quiera hacer es descargar 3.11 binary package, tomar el archivo jar poi-ooxml y las dependencias en el directorio ooxml-lib. Importe estos a su proyecto y será ordenado.

Alternativamente, si se utiliza Maven, puede see here para la lista de los artificats usted querrá depender, pero querría ser algo como:

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.11</version> 
</dependency> 

El experto poi-OOXML la dependencia extraerá automáticamente el jar principal de POI y las dependencias para usted. Si desea trabajar con los formatos de hoja de cálculo no, también querría dependerá de la poi-scratchpad artefacto también, como se detalla en los POI components page

+0

esto funcionó para mí, ¡gracias! – MemLeak

2

1) importados todos los tarros de la carpeta POI 2) importado todos los frascos de la carpeta OOXML, que un subdirectorio de la carpeta POI 3) importado todos los frascos de carpeta de la liberación, que es un subdirectorio de la carpeta POI

String fileName = "C:/File raw.xlsx"; 
File file = new File(fileName); 
FileInputStream fileInputStream; 
Workbook workbook = null; 
Sheet sheet; 
Iterator<Row> rowIterator; 
try { 
     fileInputStream = new FileInputStream(file); 
     String fileExtension = fileName.substring(fileName.indexOf(".")); 
     System.out.println(fileExtension); 
     if(fileExtension.equals(".xls")){ 
     workbook = new HSSFWorkbook(new POIFSFileSystem(fileInputStream)); 
     } 
     else if(fileExtension.equals(".xlsx")){ 
     workbook = new XSSFWorkbook(fileInputStream); 
     } 
     else { 
     System.out.println("Wrong File Type"); 
     } 
     FormulaEvaluator evaluator workbook.getCreationHelper().createFormulaEvaluator(); 
     sheet = workbook.getSheetAt(0); 
     rowIterator = sheet.iterator(); 
     while(rowIterator.hasNext()){ 
     Row row = rowIterator.next(); 
     Iterator<Cell> cellIterator = row.cellIterator(); 
     while (cellIterator.hasNext()){ 
     Cell cell = cellIterator.next(); 
     //Check the cell type after evaluating formulae 
     //If it is formula cell, it will be evaluated otherwise no change will happen 
     switch (evaluator.evaluateInCell(cell).getCellType()){ 
     case Cell.CELL_TYPE_NUMERIC: 
     System.out.print(cell.getNumericCellValue() + " "); 
     break; 
     case Cell.CELL_TYPE_STRING: 
     System.out.print(cell.getStringCellValue() + " "); 
     break; 
     case Cell.CELL_TYPE_FORMULA: 
     Not again 
     break; 
     case Cell.CELL_TYPE_BLANK: 
     break; 
     } 
} 
System.out.println("\n"); 
} 
//System.out.println(sheet); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e){ 
e.printStackTrace(); 
}​ 
+0

gracias, muy útil –

+0

La fila no está importando ... puede compartir el enlace del archivo jar por favor – Mariyappan

7

Si utiliza Maven:

poi => poi-OOXML en artefacto ID

<dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-ooxml</artifactId> 
     <version>3.12</version> 
    </dependency> 
+0

Sugeriría usar POI 3.12 final ('3.12') en lugar de la versión beta – Gagravarr

0

No describió el entorno, de todos modos, debería descargar las bibliotecas de apache poi. Si está utilizando eclipse, haga clic con el botón derecho en su proyecto raíz, para que las propiedades y en la ruta de compilación java agreguen jar externo e importen en su proyecto esas bibliotecas:

xmlbeans-2.6.0; poi-ooxml-schemas- ...; poi-ooxml- ...; poi ...;

0

que necesitan los siguientes archivos para mi aplicación:

  • poi-OOXML-esquemas-3.14.20160307.jar
  • commons-codec-1.10.jar (esto fue en la carpeta "lib" del archivo zip que obtiene de Apache)
  • curvesapi-1.03.jar (en la carpeta "OOXML-lib")
  • poi-3.14-20160307.jar
  • poi-OOXML-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (en la carpeta "OOXML-lib")

(aunque honestamente, no estoy completamente seguro de que todos son necesarios ...) Es un poco confuso, ya que son empaquetados que camino. Necesitaba colocarlos manualmente en mi propia carpeta "lib" y luego agregar las referencias ...

Maven siempre parece descargar más de lo que necesito, así que siempre coloco libaries/dlls y cosas así manualmente.

+0

Apache POI [proporciona una página útil que explica qué jarrones son necesarios para qué] (http://poi.apache.org/overview.html#components), y todo lo que necesita viene en la descarga binaria, por lo que no tiene por qué ser confuso o un misterio. – Gagravarr

+0

esa página es útil si vas a usar Maven, pero prefiero agregar dependencias manualmente. La página no muestra todo por separado. Algunos de ellos no son notables en tiempo de compilación, pero los encontrará al marcar excepciones en tiempo de ejecución. Mi implementación importa archivos XLS y XLSX en un jtable. Lo anterior parecía ser todo lo que se requería para eso. – pcalkins

+1

¡Todo lo incluido allí se envía en la descarga binaria! Tanto qué jarras necesitan los componentes, y qué dependencias necesitan los frascos – Gagravarr

5

Problema: Al importar la clase "org.apache.poi.xssf.usermodel.XSSFWorkbook" que muestra un error en eclipse.

Solución: Utilice esta dependencia Maven para resolver este problema:

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.15</version> 
</dependency> 

-Hari Krishna Neela