Não é possível importar o XSSF no Apache POI

121

Estou fazendo referência à versão 3.7 do Apache POI e estou recebendo um erro "não pode ser resolvido" quando:

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

Outras instruções de importação que fazem referência ao POI NÃO me dão erros, como:

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

Alguma ideia??

Mark Jackson
fonte
Eu estava recebendo o mesmo problema, ele parece estar enraizada no arquivo poi-3.whatever.jar não ter o XSSF embalado dentro por algum motivo
Sr. Redstoner

Respostas:

197

Para o OOXML funcionar, você precisa do jar POI-OOXML, que é embalado separadamente do jar POI.

Faça o download do jar POI-OOXML no seguinte local -

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

Para o Maven2, adicione a dependência abaixo -

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>
Pushkar
fonte
Era disso que eu precisava. Para mim (versão 3.11), bastava adicionar um jar adicional: poit-ooxml-3.11-20141221.jar. Não percebi que não havia vínculo entre eles. Obrigado pela resposta Pushkar +1.
Clint L
32

As classes para os formatos de arquivo OOXML (como XSSF para .xlsx) estão em um arquivo Jar diferente. Você precisa incluir o jar poi-ooxml em seu projeto, juntamente com as dependências para ele

Você pode obter uma lista de todos os componentes e suas dependências no site do POI aqui .

O que você provavelmente quer fazer é baixar o pacote binário 3.11 , pegar o poi-ooxmljar dele e as dependências no ooxml-libdiretório. Importe-os para o seu projeto e você será classificado.

Como alternativa, se você usa o Maven, pode ver aqui a lista dos artifícios dos quais deseja depender, mas seria algo como:

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

A dependência do maven poi-ooxml puxará o jar do POI principal e as dependências para você automaticamente. Se você deseja trabalhar com os formatos que não são de planilhas, também deve depender do poi-scratchpadartefato, conforme detalhado na página de componentes do POI

Gagravarr
fonte
10

Adicionei abaixo o conteúdo no aplicativo "build.gradle"

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
Dang Thach Hai
fonte
realmente ajudou
Abror Esonaliyev
8

Se você usa o Maven:

poi => poi-ooxml em artifactId

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
    </dependency>
Stéphane GRILLON
fonte
Eu sugiro usar POI 3,12 final ( 3.12) em vez do beta
Gagravarr
6

Problema: Ao importar a classe "org.apache.poi.xssf.usermodel.XSSFWorkbook" mostrando um erro no eclipse.

Solução: use esta dependência para resolver este problema:

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

-Hari Krishna Neela

Hari Krishna Neela
fonte
2

1) importou todos os JARS da pasta POI 2) importou todos os JARS da pasta ooxml, que é um subdiretório da pasta POI 3) importou todos os JARS da pasta lib, que é um subdiretório da pasta 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();
}​
Aman Khatri
fonte
Linha não é importar ... você pode compartilhar o link do arquivo jar por favor
demonstração
1

Eu tinha o mesmo problema, então procurei no arquivo poi-3.17.jar e não havia pacote xssf dentro.

Depois, examinei os outros arquivos e encontrei xssf int no poi-ooxml-3.17.jar

Parece que as soluções são adicionar

poi-ooxml-3.17.jar

ao seu projeto, pois isso parece fazê-lo funcionar (pelo menos para mim)

Redstoner
fonte
0

De qualquer forma, você não descreveu o ambiente; deve fazer o download das bibliotecas do apache poi. Se você estiver usando o eclipse, clique com o botão direito do mouse em seu projeto raiz, portanto, as propriedades e o caminho de construção em java adicionam jar externo e importam em seu projeto as bibliotecas:

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

sincero
fonte
0

Eu precisava dos seguintes arquivos para minha implementação:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (estava na pasta "lib" do arquivo zip que você obtém do apache)
  • curvesapi-1.03.jar (na pasta "ooxml-lib")
  • poi-3.14-20160307.jar
  • poi-ooxml-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (na pasta "ooxml-lib")

(embora, honestamente, não tenha certeza de que todos sejam necessários ...) É um pouco confuso porque eles são embalados dessa maneira. Eu precisava colocá-los manualmente na minha própria pasta "lib" e adicionar as referências ...

O Maven sempre parece baixar mais do que eu preciso, então eu sempre coloco libaries / dlls e coisas assim manualmente.

pcalkins
fonte
O Apache POI fornece uma página útil, explicando quais jars são necessários e tudo o que você precisa vem no download binário, para que não precise ser confuso ou um mistério!
Gagravarr 11/03/16
essa página é útil se você usar o Maven, mas prefiro adicionar dependências manualmente. A página não lista tudo separadamente. Alguns deles não são visíveis no tempo de construção, mas você os encontrará verificando exceções no tempo de execução. Minha implementação importa arquivos XLS e XLSX em um jtable. O exposto acima parecia ser tudo o que era necessário para isso.
pcalkins
1
Tudo o que está listado lá é enviado no download binário! Tanto o que destoa a necessidade componentes, e que dependências os frascos precisam
Gagravarr
0

Depois de tentar várias coisas, o que realmente funcionou foi: 1. baixar manualmente "poi" e "poi-ooxml" 2.Adicionar esses frascos d / w em "Dependências do Maven"

Sanchi Tyagi
fonte