Impossibile importare XSSF in Apache POI


121

Sto facendo riferimento alla versione 3.7 del POI Apache e ricevo un errore "non può essere risolto" quando lo faccio:

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

Altre istruzioni di importazione che fanno riferimento a POI NON mi danno errori, come ad esempio:

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

Qualche idea??


Mi è stato sempre lo stesso problema, sembra essere radicata nel file POI-3.whatever.jar non avendo la xssf imballato all'interno per qualche ragione
il sig Redstoner

Risposte:


197

Perché OOXML funzioni è necessario il vaso POI-OOXML che è confezionato separatamente dal vaso POI.

Scarica il vaso POI-OOXML dal seguente percorso:

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

Per Maven2 aggiungi la seguente dipendenza -

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

Questo è ciò di cui avevo bisogno. Per me (versione 3.11) dovevo semplicemente aggiungere un ulteriore jar: poit-ooxml-3.11-20141221.jar. Non mi rendevo conto che non ci fosse alcun legame tra loro. Grazie per la risposta Pushkar +1.
Clint L

32

Le classi per i formati di file OOXML (come XSSF per .xlsx) si trovano in un file Jar diverso. Devi includere il vaso poi-ooxml nel tuo progetto, insieme alle relative dipendenze

È possibile ottenere un elenco di tutti i componenti e le loro dipendenze sul sito Web dei POI qui .

Quello che probabilmente vuoi fare è scaricare il pacchetto binario 3.11 , prendere il poi-ooxmljar da esso e le dipendenze nella ooxml-libdirectory. Importa questi nel tuo progetto e sarai ordinato.

In alternativa, se usi Maven, puoi vedere qui l'elenco degli artificiali da cui vorrai dipendere, ma vorrebbe essere qualcosa del tipo:

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

La dipendenza poi-ooxml maven attirerà automaticamente il vaso POI principale e le dipendenze. Se desideri lavorare con formati non di foglio di calcolo, dovresti anche dipendere poi-scratchpaddall'artefatto, come descritto in dettaglio nella pagina dei componenti del PDI


10

Ho aggiunto sotto i contenuti nell'app "build.gradle"

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

è davvero aiutato
Abror Esonaliyev

8

Se usi Maven:

poi => poi-ooxml in artifactId

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

Suggerirei di utilizzare POI 3.12 final ( 3.12) invece della beta
Gagravarr

6

Problema: durante l'importazione della classe "org.apache.poi.xssf.usermodel.XSSFWorkbook" viene visualizzato un errore in eclipse.

Soluzione: utilizzare questa dipendenza Maven per risolvere questo problema:

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

-Hari Krishna Neela


2

1) importati tutti i JAR dalla cartella POI 2) Importati tutti i JAR dalla cartella ooxml che una sottodirectory della cartella POI 3) Importati tutti i JAR dalla cartella lib che è una sottodirectory della cartella 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 riga non viene importata ... puoi condividere il link del file jar per favore
demo

1

Ho avuto lo stesso problema, quindi ho scavato nel file poi-3.17.jar e non c'era il pacchetto xssf all'interno.

Ho quindi esaminato gli altri file e ho trovato xssf nel poi-ooxml-3.17.jar

Quindi sembra che la soluzione sia aggiungere

poi-ooxml-3.17.jar

al tuo progetto, poiché sembra che funzioni (almeno per me)


0

Non hai descritto l'ambiente, comunque, dovresti scaricare le librerie di apache poi. Se stai usando eclipse, fai clic con il pulsante destro del mouse sul tuo progetto root, quindi le proprietà e nel percorso di compilazione java aggiungi jar esterno e importa nel tuo progetto quelle librerie:

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


0

Avevo bisogno dei seguenti file per la mia implementazione:

  • POI-OOXML-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (era nella cartella "lib" del file zip ottenuto da apache)
  • curvesapi-1.03.jar (nella cartella "ooxml-lib")
  • POI-3.14-20160307.jar
  • POI-OOXML-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (nella cartella "ooxml-lib")

(anche se onestamente, non sono completamente sicuro che siano tutti necessari ...) È un po 'confuso perché sono confezionati in questo modo. Avevo bisogno di inserirli manualmente nella mia cartella "lib" e quindi aggiungere i riferimenti ...

Maven sembra sempre scaricare più del necessario, quindi inserisco sempre librerie / dll e cose del genere manualmente.


Apache POI fornisce una comoda pagina che spiega quali barattoli sono necessari per cosa , e tutto ciò di cui hai bisogno viene fornito nel download binario, quindi non deve essere fonte di confusione o un mistero!
Gagravarr

quella pagina è utile se hai intenzione di utilizzare Maven, ma preferisco aggiungere manualmente le dipendenze. La pagina non elenca tutto separatamente. Alcuni di essi non sono visibili in fase di compilazione, ma li troverai controllando le eccezioni in fase di esecuzione. La mia implementazione importa file XLS e XLSX in un jtable. Quanto sopra sembrava essere tutto ciò che era necessario per questo.
pcalkins

1
Tutto ciò che è elencato viene fornito nel download binario! Sia di quali barattoli hanno bisogno i componenti, sia di quali dipendenze hanno bisogno i barattoli
Gagravarr

0

Dopo aver provato più cose, quello che ha funzionato davvero è stato: 1. scaricare "poi" e "poi-ooxml" manualmente 2. Aggiungere questi file d / w in "Maven Dependencies"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.