No se puede importar XSSF en Apache POI


121

Estoy haciendo referencia a la versión 3.7 de Apache POI y obtengo un error de "no se puede resolver" cuando lo hago:

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

Otras declaraciones de importación que hacen referencia a PDI NO me dan errores, como:

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

¿¿Algunas ideas??


Estaba teniendo el mismo problema, parece estar enraizado en el archivo poi-3.whatever.jar que no tiene el xssf empaquetado adentro por alguna razón
Mr Redstoner

Respuestas:


197

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

Descargue el tarro de POI-OOXML desde la siguiente ubicación:

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

Para Maven2, agregue la siguiente dependencia:

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

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

32

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

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

Lo que probablemente quiera hacer es descargar el paquete binario 3.11 , tomar el poi-ooxmljar y las dependencias en el ooxml-libdirectorio. Importe estos a su proyecto y estará ordenado.

Alternativamente, si usa Maven, puede ver aquí la lista de los artificats de los que querrá depender, pero querría ser algo como:

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

La dependencia de poi-ooxml maven extraerá el jar de POI principal y las dependencias automáticamente. Si desea trabajar con formatos que no son de hoja de cálculo, también querrá depender del poi-scratchpadartefacto, como se detalla en la página de componentes de PDI


10

Agregué los siguientes contenidos en la aplicación "build.gradle"

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'

realmente ayudó
Abror Esonaliyev

8

Si usa Maven:

poi => poi-ooxml en artifactId

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

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

6

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

Solución: utilice esta dependencia de maven para resolver este problema:

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

-Hari Krishna Neela


2

1) importó todos los JARS de la carpeta POI 2) Importé todos los JARS de la carpeta ooxml que es un subdirectorio de la carpeta POI 3) Importé todos los JARS de la carpeta lib 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();
}​

La fila no se está importando ... ¿puede compartir el enlace del archivo jar por favor?
demostración

1

Tuve el mismo problema, así que busqué en el archivo poi-3.17.jar y no había ningún paquete xssf dentro.

Luego revisé los otros archivos y encontré xssf int el poi-ooxml-3.17.jar

Entonces parece que la solución es agregar

poi-ooxml-3.17.jar

a tu proyecto, ya que eso parece hacer que funcione (al menos para mí)


0

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

xmlbeans-2.6.0; poi-ooxml-esquemas- ...; poi-ooxml- ...; poi- ....;


0

Necesitaba los siguientes archivos para mi implementación:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (esto estaba 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 sean necesarios ...) Es un poco confuso porque están empaquetados de esa manera. 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 bibliotecas / dlls y cosas así manualmente.


Apache POI proporciona una página útil que explica qué jar se necesitan para qué , y todo lo que necesita viene en la descarga binaria, por lo que no tiene por qué ser confuso o un misterio.
Gagravarr

esa página es útil si va a usar Maven, pero prefiero agregar dependencias manualmente. La página no enumera todo por separado. Algunos de ellos no se notan en el momento de la compilación, pero los encontrará al verificar las excepciones en el 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 que se enumera allí se envía en la descarga binaria! Tanto qué jarras necesitan los componentes como qué dependencias necesitan las jarras
Gagravarr

0

Después de probar varias cosas, lo que realmente funcionó fue: 1. descargar "poi" y "poi-ooxml" manualmente 2. Agregar estos frascos de d / w en "Dependencias de Maven"

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.