Apache POI'de XSSF içe aktarılamıyor


121

Apache İÇN'sinin 3.7 sürümüne atıfta bulunuyorum ve şunu yaptığımda "çözülemiyor" hatası alıyorum:

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

Referans POI o Diğer ithalat ifadeleri DO DEĞİL bana gibi hataları vermek:

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

Herhangi bir fikir??


Ben de aynı problemi alıyordum, görünen o ki, poi-3.whatever.jar dosyasında bir sebepten xssf paketinin olmaması
Bay Redstoner

Yanıtlar:


197

OOXML'nin çalışması için, POI kavanozundan ayrı olarak paketlenmiş POI-OOXML kavanozuna ihtiyacınız vardır.

POI-OOXML kavanozunu aşağıdaki konumdan indirin -

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

Maven2 için aşağıdaki bağımlılığı ekleyin -

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

İhtiyacım olan şey bu. Benim için (sürüm 3.11) ek bir kavanoz eklemem gerekiyordu: poit-ooxml-3.11-20141221.jar. Aralarında bir bağ olmadığını fark etmemiştim. Pushkar +1 cevabınız için teşekkürler.
Clint L

32

OOXML dosya formatları için sınıflar (.xlsx için XSSF gibi) farklı bir Jar dosyasındadır. Poi-ooxml kavanozunu, bağımlılıkları ile birlikte projenize dahil etmeniz gerekir.

POI web sitesindeki tüm bileşenlerin ve bunların bağımlılıklarının bir listesini burada bulabilirsiniz .

Muhtemelen yapmak isteyeceğiniz şey, 3.11 ikili paketini indirmek , poi-ooxmlkavanozu buradan almak ve içindeki bağımlılıklarıooxml-lib dizininde. Bunları projenize aktarın ve sıralanacaksınız.

Alternatif olarak, Maven'i kullanırsanız, güvenmek isteyeceğiniz eserlerin listesini burada görebilirsiniz , ancak şunun gibi bir şey olmak isteyecektir:

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

Poi-ooxml maven bağımlılığı, ana POI kavanozunu ve bağımlılıkları sizin için otomatik olarak çekecektir. Elektronik tablo olmayan biçimlerle çalışmak istiyorsanız poi-scratchpad, POI bileşenleri sayfasında ayrıntılı olarak açıklandığı gibi yapıyı da kullanmak isteyebilirsiniz.


10

İçeriği "build.gradle" uygulamasına ekledim

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

gerçekten yardımcı oldu
Abror Esonaliyev

8

Maven kullanıyorsanız:

poi => artifactId'de poi-ooxml

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

3.12Beta yerine POI 3.12 final ( ) kullanmanızı öneririm
Gagravarr

6

Sorun: "org.apache.poi.xssf.usermodel.XSSFWorkbook" sınıfını içe aktarırken tutulmada bir hata gösteriyor.

Çözüm: Bu sorunu çözmek için Bu maven bağımlılığını kullanın:

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

-Hari Krishna Neela


2

1) POI klasöründen tüm JARS'ları içe aktarıldı 2) POI klasörünün bir alt dizini olan ooxml klasöründen tüm JARS'ları içe aktarıldı 3) POI klasörünün bir alt dizini olan lib klasöründen tüm JARS'ları içe aktarıldı

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();
}​

Satır içe aktarılmıyor ... jar dosyası bağlantısını paylaşır mısınız lütfen
demo

1

Aynı sorunu yaşadım, bu yüzden poi-3.17.jar dosyasını araştırdım ve içinde xssf paketi yoktu.

Daha sonra diğer dosyaları inceledim ve poi-ooxml-3.17.jar içinde xssf buldum

Görünüşe göre çözümler eklemek

poi-ooxml-3.17.jar

projenize, işe yarayacak gibi görünüyor (en azından benim için)


0

Ortamı tarif etmediniz, zaten apache poi kitaplıklarını indirmelisiniz. Eclipse kullanıyorsanız, kök projenize sağ tıklayın, böylece özellikler ve java oluşturma yolunda harici jar ekleyin ve projenize bu kitaplıkları içe aktarın:

xmlbeans-2.6.0; poi-ooxml-şemaları- ...; poi-ooxml- ...; poi- ....;


0

Uygulamam için aşağıdaki dosyalara ihtiyacım vardı:

  • poi-OOXML şemalar-3.14.20160307.jar
  • commons-codec-1.10.jar (bu, apache'den aldığınız zip dosyasının "lib" klasöründeydi)
  • curvesapi-1.03.jar ("ooxml-lib" klasöründe)
  • poi-3.14-20160307.jar
  • poi-OOXML 3.14-20160307.jar
  • xmlbeans-2.6.0.jar ("ooxml-lib" klasöründe)

(yine de dürüst olmak gerekirse, hepsinin gerekli olduğundan tam olarak emin değilim ...) Bu biraz kafa karıştırıcı çünkü bu şekilde paketlenmişler. Bunları manuel olarak kendi "lib" klasörüme yerleştirmem ve ardından referansları eklemem gerekiyordu ...

Maven her zaman ihtiyacım olandan fazlasını indiriyor gibi görünüyor, bu yüzden her zaman libariler / dll'ler ve buna benzer şeyleri manuel olarak yerleştiriyorum.


Apache POI , ne için hangi kavanozlara ihtiyaç duyulduğunu açıklayan kullanışlı bir sayfa sağlar ve ihtiyacınız olan her şey ikili indirmede gelir, böylece kafa karıştırıcı veya gizemli olmak zorunda kalmaz!
Gagravarr

Maven'i kullanacaksanız bu sayfa kullanışlıdır, ancak bağımlılıkları manuel olarak eklemeyi tercih ederim. Sayfa her şeyi ayrı ayrı listelemiyor. Bazıları derleme zamanında farkedilemez, ancak bunları çalışma zamanında istisnaları kontrol ederek bulabilirsiniz. Uygulamam XLS ve XLSX dosyalarını bir jtable'a aktarıyor. Yukarıdakiler, bunun için gerekli olan tek şey gibi görünüyordu.
pcalkins

1
Orada listelenen her şey ikili indirmede gönderilir! Hem bileşenlerin ihtiyacı olan kavanozlar hem de kavanozların ihtiyaç duyduğu bağımlılıklar
Gagravarr

0

Birden fazla şeyi denedikten sonra gerçekten işe yarayan şey şuydu: 1. "poi" ve "poi-ooxml" yi manuel olarak indirmek 2. Bu d / w kavanozlarını "Maven Bağımlılıkları" na eklemek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.