Nie można zaimportować XSSF do Apache POI


121

Odwołuję się do wersji 3.7 Apache POI i otrzymuję błąd „nie można rozwiązać”, gdy:

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

Inne instrukcje importu, które odwołują się do POI, NIE powodują błędów, takich jak:

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

Jakieś pomysły??


I był już ten sam problem, wydaje się być zakorzenione w pliku poi-3.whatever.jar nie posiadające xssf zapakowane wewnątrz jakiegoś powodu
— Mr Redstoner

Odpowiedzi:


197

Aby OOXML działał, potrzebujesz słoika POI-OOXML, który jest zapakowany oddzielnie od słoika POI.

Pobierz słoik POI-OOXML z następującej lokalizacji -

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

Dla Maven2 dodaj poniższą zależność -

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

To jest to, czego potrzebowałem. U mnie (wersja 3.11) po prostu musiałem dodać dodatkowy jar: poit-ooxml-3.11-20141221.jar. Nie zdawałem sobie sprawy, że między nimi nie ma więzi. Dzięki za odpowiedź Pushkar +1.
— Clint L

32

Klasy formatów plików OOXML (takich jak XSSF dla .xlsx) znajdują się w innym pliku Jar. Musisz dołączyć jar poi-ooxml do swojego projektu wraz z jego zależnościami

Listę wszystkich komponentów i ich zależności można znaleźć na stronie internetowej POI tutaj .

To, co prawdopodobnie chcesz zrobić, to pobrać pakiet binarny 3.11 , pobrać z niego poi-ooxmljar i zależności w ooxml-libkatalogu. Zaimportuj je do swojego projektu, a zostaniesz posortowany.

Alternatywnie, jeśli używasz Mavena, możesz zobaczyć tutaj listę artefaktów, na których chcesz polegać, ale chciałoby to być coś takiego:

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

Zależność poi-ooxml maven automatycznie pobierze główny jar POI i zależności. Jeśli chcesz pracować z formatami innymi niż arkusze kalkulacyjne, możesz również polegać na poi-scratchpadartefakcie, jak opisano szczegółowo na stronie komponentów POI


10

Dodałem poniżej zawartość w aplikacji „build.gradle”

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

to naprawdę pomogło
— Abror Esonaliyev,

8

Jeśli używasz Maven:

poi => poi-ooxml w artifactId

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

Sugerowałbym użycie POI 3.12 final ( 3.12) zamiast wersji beta
— Gagravarr

6

Problem: podczas importowania klasy „org.apache.poi.xssf.usermodel.XSSFWorkbook” pokazującej błąd w zaćmieniu.

Rozwiązanie: użyj tej zależności maven, aby rozwiązać ten problem:

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

-Hari Krishna Neela


2

1) zaimportował wszystkie JARS z folderu POI 2) Zaimportował wszystkie JARS z folderu ooxml, który jest podkatalogiem folderu POI 3) Zaimportował wszystkie JARS z folderu lib, który jest podkatalogiem folderu 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();
}​

Wiersz nie importuje ... czy możesz udostępnić link do pliku jar
— demo

1

Miałem ten sam problem, więc przekopałem się przez plik poi-3.17.jar i nie było w nim pakietu xssf.

Następnie przejrzałem inne pliki i znalazłem xssf int w poi-ooxml-3.17.jar

Wydaje się więc, że rozwiązaniem jest dodanie

poi-ooxml-3.17.jar

do twojego projektu, ponieważ wydaje się, że to działa (przynajmniej dla mnie)


0

Nie opisałeś środowiska, w każdym razie powinieneś pobrać biblioteki apache poi. Jeśli używasz eclipse, kliknij prawym przyciskiem myszy projekt główny, więc właściwości i ścieżka kompilacji java dodaj zewnętrzny jar i zaimportuj do projektu te biblioteki:

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


0

Do realizacji potrzebowałem następujących plików:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (to było w folderze "lib" pliku zip, który otrzymałeś z Apache)
  • curvesapi-1.03.jar (w folderze „ooxml-lib”)
  • poi-3.14-20160307.jar
  • poi-ooxml-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (w folderze „ooxml-lib”)

(choć szczerze mówiąc, nie jestem do końca pewien, czy wszystkie są potrzebne ...) To trochę zagmatwane, ponieważ są zapakowane w ten sposób. Musiałem umieścić je ręcznie we własnym folderze „lib”, a następnie dodać odniesienia ...

Wydaje się, że Maven zawsze pobiera więcej niż potrzebuję, więc zawsze ręcznie umieszczam biblioteki / biblioteki dll i tym podobne.


Apache POI udostępnia przydatną stronę wyjaśniającą, jakie słoiki są potrzebne do czego , a wszystko, czego potrzebujesz, znajduje się w pliku binarnym do pobrania, więc nie musi to być mylące ani tajemnicze!
— Gagravarr

ta strona jest przydatna, jeśli zamierzasz używać Mavena, ale wolę ręcznie dodawać zależności. Strona nie zawiera wszystkiego oddzielnie. Niektóre z nich nie są widoczne w czasie kompilacji, ale znajdziesz je, sprawdzając wyjątki w czasie wykonywania. Moja implementacja importuje pliki XLS i XLSX do jtable. Powyższe wydawało się wszystkim, czego potrzeba do tego.
— pcalkins,

1
Wszystko, co tam wymienione, jest dostarczane w postaci binarnej do pobrania! Zarówno to, czego potrzebują słoiki, jak i jakich zależności potrzebują słoiki
— Gagravarr

0

Po wypróbowaniu wielu rzeczy, co naprawdę zadziałało to: 1. ręczne pobranie plików „poi” i „poi-ooxml” 2. dodanie tych słoików d / w do „zależności Mavena”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.