Không thể nhập XSSF trong Apache POI


121

Tôi đang tham khảo phiên bản 3.7 của Apache POI và tôi gặp phải lỗi "không thể giải quyết" khi tôi thực hiện:

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

Các câu lệnh nhập khác tham chiếu POI KHÔNG cho tôi lỗi, chẳng hạn như:

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

Có ý kiến ​​gì không ??


Tôi đã nhận được cùng một vấn đề, nó dường như được bắt nguồn từ các tập tin poi-3.whatever.jar không có xssf đóng gói bên trong đối với một số lý do
Ông Redstoner

Câu trả lời:


197

Để OOXML hoạt động, bạn cần có bình POI-OOXML được đóng gói riêng biệt với bình POI.

Tải xuống bình POI-OOXML từ vị trí sau -

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

Đối với Maven2, hãy thêm phần phụ thuộc bên dưới:

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

Đây là những gì tôi cần. Đối với tôi (phiên bản 3.11), tôi chỉ cần thêm một lọ bổ sung: poit-ooxml-3.11-20141221.jar. Tôi không nhận ra rằng không có sự ràng buộc nào giữa họ. Cảm ơn câu trả lời Pushkar +1.
Clint L

32

Các lớp cho định dạng tệp OOXML (chẳng hạn như XSSF cho .xlsx) nằm trong một tệp Jar khác. Bạn cần bao gồm jar poi-ooxml trong dự án của mình, cùng với các phụ thuộc cho nó

Bạn có thể lấy danh sách tất cả các thành phần và phụ thuộc của chúng trên trang web POI tại đây .

Những gì bạn có thể muốn làm là tải xuống gói nhị phân 3.11 , lấy poi-ooxmljar từ nó và các phụ thuộc trong ooxml-libthư mục. Nhập những thứ này vào dự án của bạn và bạn sẽ được sắp xếp.

Ngoài ra, nếu bạn sử dụng Maven, bạn có thể xem ở đây để biết danh sách các công sự mà bạn muốn dựa vào, nhưng nó muốn giống như:

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

Phần phụ thuộc maven poi-ooxml sẽ tự động kéo vào bình POI chính và các phần phụ thuộc cho bạn. Nếu bạn muốn làm việc với các định dạng không phải bảng tính, bạn cũng muốn phụ thuộc vào cấu phần phần mềmpoi-scratchpad , như chi tiết trên trang thành phần POI


10

Tôi đã thêm nội dung bên dưới trong ứng dụng "build.gradle"

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

nó thực sự hữu ích
Abror Esonaliyev

8

Nếu bạn sử dụng Maven:

poi => poi-ooxml trong craftId

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

Tôi khuyên bạn nên sử dụng POI 3.12 final ( 3.12) thay vì phiên bản beta
Gagravarr

6

Sự cố: Trong khi nhập lớp "org.apache.poi.xssf.usermodel.XSSFWorkbook" hiển thị lỗi trong eclipse.

Giải pháp: Sử dụng Phụ thuộc maven này để giải quyết vấn đề này:

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

-Hari Krishna Neela


2

1) Đã nhập tất cả các JARS từ thư mục POI 2) Đã nhập tất cả các JARS từ thư mục ooxml là thư mục con của thư mục POI 3) Đã nhập tất cả các JARS từ thư mục lib là thư mục con của thư mục 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();
}​

Hàng không được nhập ... bạn có thể chia sẻ liên kết tệp jar được không
demo

1

Tôi đã gặp vấn đề tương tự, vì vậy tôi đã đào qua tệp poi-3.17.jar và không có gói xssf nào bên trong.

Sau đó, tôi xem qua các tệp khác và tìm thấy xssf int poi-ooxml-3.17.jar

Vì vậy, có vẻ như các giải pháp là thêm

poi-ooxml-3.17.jar

cho dự án của bạn, vì điều đó dường như làm cho nó hoạt động (ít nhất là đối với tôi)


0

Dù sao thì bạn cũng không mô tả môi trường, bạn nên tải xuống các thư viện apache poi. Nếu bạn đang sử dụng eclipse, hãy nhấp chuột phải vào dự án gốc của bạn, vì vậy các thuộc tính và trong đường dẫn xây dựng java thêm jar bên ngoài và nhập vào dự án của bạn những thư viện đó:

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


0

Tôi cần các tệp sau để triển khai:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (cái này nằm trong thư mục "lib" của tệp zip bạn lấy từ apache)
  • curveapi-1.03.jar (trong thư mục "ooxml-lib")
  • poi-3,14-20160307.jar
  • poi-ooxml-3,14-20160307.jar
  • xmlbeans-2.6.0.jar (trong thư mục "ooxml-lib")

(mặc dù thành thật mà nói, tôi không hoàn toàn chắc chắn rằng tất cả chúng đều cần thiết ...) Nó hơi khó hiểu vì chúng được đóng gói theo cách đó. Tôi cần đặt chúng theo cách thủ công trong thư mục "lib" của riêng mình và sau đó thêm các tham chiếu ...

Maven dường như luôn tải xuống nhiều hơn tôi cần, vì vậy tôi luôn đặt libaries / dlls và những thứ tương tự theo cách thủ công.


Apache POI cung cấp một trang tiện dụng giải thích những cái lọ cần thiết để làm gì và mọi thứ bạn cần đều có trong bản tải xuống nhị phân, vì vậy nó không cần phải gây nhầm lẫn hoặc bí ẩn!
Gagravarr

trang đó rất hữu ích nếu bạn định sử dụng Maven, nhưng tôi thích thêm các phần phụ thuộc theo cách thủ công. Trang này không liệt kê mọi thứ một cách riêng biệt. Một số trong số chúng không đáng chú ý tại thời điểm xây dựng, nhưng bạn sẽ tìm thấy chúng bằng cách kiểm tra các ngoại lệ trong thời gian chạy. Việc triển khai của tôi nhập các tệp XLS và XLSX vào một jtable. Ở trên dường như là tất cả những gì được yêu cầu cho điều đó.
pcalkins,

1
Mọi thứ được liệt kê ở đó đều được vận chuyển trong bản tải xuống nhị phân! Cả những gì lọ các thành phần cần thiết, và cách phụ thuộc các lọ cần
Gagravarr

0

Sau khi thử nhiều cách, những gì thực sự hiệu quả là: 1. tải xuống "poi" và "poi-ooxml" theo cách thủ công 2. Thêm các lọ d / w này vào "Maven Dependencies"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.