Tidak dapat mengimpor XSSF di Apache POI


121

Saya merujuk Apache POI versi 3.7 dan saya mendapatkan kesalahan "tidak dapat diselesaikan" saat melakukannya:

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

Pernyataan impor lain yang mereferensikan POI TIDAK memberi saya kesalahan, seperti:

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

Ada ide ??


Saya mendapatkan masalah yang sama, sepertinya file tersebut berakar pada file poi-3.whatever.jar tidak memiliki xssf yang dikemas di dalamnya karena suatu alasan
Tn. Redstoner

Jawaban:


197

Agar OOXML bekerja, Anda memerlukan tabung POI-OOXML yang dikemas terpisah dari tabung POI.

Unduh jar POI-OOXML dari lokasi berikut -

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

Untuk Maven2 tambahkan dependensi di bawah ini -

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

Inilah yang saya butuhkan. Bagi saya (versi 3.11), saya hanya perlu menambahkan stoples tambahan: poit-ooxml-3.11-20141221.jar. Saya tidak menyadari tidak ada ikatan di antara mereka. Terima kasih atas jawabannya Pushkar +1.
Clint L

32

Kelas untuk format file OOXML (seperti XSSF untuk .xlsx) berada dalam file Jar yang berbeda. Anda perlu menyertakan toples poi-ooxml dalam proyek Anda, bersama dengan dependensinya

Anda bisa mendapatkan daftar semua komponen dan ketergantungannya pada situs web POI di sini .

Apa yang mungkin ingin Anda lakukan adalah mengunduh paket biner 3.11 , ambil poi-ooxmljar darinya, dan dependensi di ooxml-libdirektori. Impor ini ke dalam proyek Anda dan Anda akan disortir.

Bergantian, jika Anda menggunakan Maven, Anda dapat melihat di sini untuk daftar artificat yang ingin Anda andalkan, tetapi itu ingin menjadi seperti:

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

Ketergantungan poi-ooxml maven akan menarik tabung POI utama dan ketergantungan untuk Anda secara otomatis. Jika Anda ingin bekerja dengan format non-spreadsheet, Anda juga ingin bergantung pada poi-scratchpadartefak juga, seperti yang dijelaskan pada halaman komponen POI


10

Saya menambahkan konten di bawah ini dalam aplikasi "build.gradle"

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

ini sangat membantu
Abror Esonaliyev

8

Jika Anda menggunakan Maven:

poi => poi-ooxml di artifactId

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

Saya sarankan menggunakan POI 3.12 final ( 3.12) daripada beta
Gagravarr

6

Masalah: Saat mengimpor kelas "org.apache.poi.xssf.usermodel.XSSFWorkbook" menunjukkan kesalahan dalam gerhana.

Solusi: Gunakan ketergantungan maven ini untuk mengatasi masalah ini:

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

-Hari Krishna Neela


2

1) mengimpor semua JARS dari folder POI 2) Mengimpor semua JARS dari folder ooxml yang merupakan subdirektori dari folder POI 3) Mengimpor semua JARS dari folder lib yang merupakan subdirektori dari folder 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();
}​

Baris tidak diimpor ... bisakah Anda membagikan tautan file jar
demo

1

Saya memiliki masalah yang sama, jadi saya menggali file poi-3.17.jar dan tidak ada paket xssf di dalamnya.

Saya kemudian memeriksa file lainnya dan menemukan xssf int di poi-ooxml-3.17.jar

Jadi sepertinya solusinya adalah menambahkan

poi-ooxml-3.17.jar

untuk proyek Anda, karena itu tampaknya membuatnya berhasil (setidaknya bagi saya)


0

Anda tidak menjelaskan lingkungannya, bagaimanapun, Anda harus mengunduh pustaka apache poi. Jika Anda menggunakan eclipse, klik kanan pada proyek root Anda, jadi properti dan di jalur pembuatan java tambahkan jar eksternal dan impor dalam proyek Anda perpustakaan tersebut:

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


0

Saya membutuhkan file berikut untuk implementasi saya:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (ini ada di folder "lib" dari file zip yang Anda dapatkan dari apache)
  • curvesapi-1.03.jar (di folder "ooxml-lib")
  • poi-3.14-20160307.jar
  • poi-ooxml-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (di folder "ooxml-lib")

(meskipun sejujurnya, saya tidak sepenuhnya yakin semuanya perlu ...) Agak membingungkan karena dikemas seperti itu. Saya perlu menempatkannya secara manual di folder "lib" saya sendiri dan kemudian menambahkan referensi ...

Maven sepertinya selalu mendownload lebih dari yang saya butuhkan, jadi saya selalu menempatkan libaries / dll dan hal-hal seperti itu secara manual.


Apache POI menyediakan halaman praktis yang menjelaskan toples apa yang diperlukan untuk apa , dan semua yang Anda butuhkan ada dalam unduhan biner, jadi tidak perlu membingungkan atau menjadi misteri!
Gagravarr

halaman itu berguna jika Anda akan menggunakan Maven, tetapi saya lebih suka menambahkan dependensi secara manual. Halaman ini tidak mencantumkan semuanya secara terpisah. Beberapa di antaranya tidak terlihat pada waktu pembuatan, tetapi Anda akan menemukannya dengan memeriksa pengecualian pada waktu proses. Implementasi saya mengimpor file XLS dan XLSX ke dalam jtable. Di atas tampaknya semua yang diperlukan untuk itu.
pcalkins

1
Semua yang terdaftar di sana dikirimkan dalam unduhan biner! Baik stoples apa yang dibutuhkan komponen, dan ketergantungan apa yang dibutuhkan stoples
Gagravarr

0

Setelah mencoba beberapa hal, yang benar-benar berhasil adalah: 1. mengunduh "poi" dan "poi-ooxml" secara manual 2. Menambahkan botol d / w ini ke dalam "Maven Dependencies"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.