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.