ไม่สามารถนำเข้า XSSF ใน Apache POI


121

ฉันกำลังอ้างถึง Apache POI เวอร์ชัน 3.7 และฉันได้รับข้อผิดพลาด "ไม่สามารถแก้ไขได้" เมื่อฉันทำ:

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

ข้อความนำเข้าอื่น ๆ ที่อ้างอิง POI อย่าให้ข้อผิดพลาดแก่ฉันเช่น:

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

ความคิดใด ๆ ??


ฉันได้รับปัญหาเดียวกันดูเหมือนว่าจะถูกรูทในไฟล์ poi-3.whatever.jar ที่ไม่มี xssf บรรจุอยู่ภายในด้วยเหตุผลบางประการ
Mr Redstoner

คำตอบ:


197

เพื่อให้ OOXML ใช้งานได้คุณต้องใช้โถ POI-OOXML ซึ่งบรรจุแยกต่างหากจากโถ POI

ดาวน์โหลดโถ POI-OOXML จากตำแหน่งต่อไปนี้ -

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

สำหรับ Maven2 ให้เพิ่มการอ้างอิงด้านล่าง -

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

นี่คือสิ่งที่ฉันต้องการ สำหรับฉัน (เวอร์ชัน 3.11) ฉันต้องเพิ่มโถเพิ่มเติม: poit-ooxml-3.11-20141221.jar ฉันไม่รู้ว่าไม่มีการผูกมัดระหว่างพวกเขา ขอบคุณสำหรับคำตอบ Pushkar +1
Clint L

32

คลาสสำหรับรูปแบบไฟล์ OOXML (เช่น XSSF สำหรับ. xlsx) อยู่ในไฟล์ Jar อื่น คุณต้องรวม jar poi-ooxml ไว้ในโปรเจ็กต์ของคุณพร้อมกับการอ้างอิง

คุณจะได้รับรายชื่อของส่วนประกอบทั้งหมดและการอ้างอิงของพวกเขาในเว็บไซต์ POI ที่นี่

สิ่งที่คุณอาจต้องทำคือดาวน์โหลดแพคเกจไบนารี 3.11คว้าpoi-ooxmljar จากนั้นและการอ้างอิงในooxml-libไดเร็กทอรี นำเข้าสิ่งเหล่านี้ในโครงการของคุณและคุณจะถูกจัดเรียง

อีกทางเลือกหนึ่งหากคุณใช้ Maven คุณสามารถดูรายชื่อสิ่งประดิษฐ์ที่คุณต้องการอ้างอิงได้ที่นี่ แต่ต้องการให้เป็นดังนี้:

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

การพึ่งพา maven poi-ooxml จะดึงโถ POI หลักและการอ้างอิงสำหรับคุณโดยอัตโนมัติ หากคุณต้องการทำงานกับรูปแบบที่ไม่ใช่สเปรดชีตคุณจะต้องขึ้นอยู่กับอาร์ติpoi-scratchpadแฟกต์ด้วยตามรายละเอียดในหน้าส่วนประกอบ POI



8

หากคุณใช้ Maven:

poi => poi-ooxml ใน artifactId

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

ฉันขอแนะนำให้ใช้ POI 3.12 final ( 3.12) แทนเบต้า
Gagravarr

6

ปัญหา: ขณะอิมพอร์ตคลาส "org.apache.poi.xssf.usermodel.XSSFWorkbook" แสดงข้อผิดพลาดใน eclipse

วิธีแก้ไข: ใช้การพึ่งพา maven นี้เพื่อแก้ไขปัญหานี้:

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

-Hari กฤษณะนีลา


2

1) นำเข้า JARS ทั้งหมดจากโฟลเดอร์ POI 2) นำเข้า JARS ทั้งหมดจากโฟลเดอร์ ooxml ซึ่งเป็นไดเร็กทอรีย่อยของโฟลเดอร์ POI 3) นำเข้า JARS ทั้งหมดจากโฟลเดอร์ lib ซึ่งเป็นไดเร็กทอรีย่อยของโฟลเดอร์ 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();
}​

แถวไม่ได้นำเข้า ... คุณช่วยแชร์ลิงค์ไฟล์ jar ได้ไหม
สาธิต

1

ฉันมีปัญหาเดียวกันดังนั้นฉันจึงขุดผ่านไฟล์ poi-3.17.jar และไม่มีแพ็คเกจ xssf อยู่ข้างใน

จากนั้นฉันก็ไปดูไฟล์อื่น ๆ และพบ xssf int poi-ooxml-3.17.jar

ดูเหมือนว่าวิธีแก้ปัญหาคือการเพิ่ม

poi-ooxml-3.17.jar

กับโครงการของคุณซึ่งดูเหมือนว่าจะทำให้ได้ผล (อย่างน้อยก็สำหรับฉัน)


0

คุณไม่ได้อธิบายสภาพแวดล้อมคุณควรดาวน์โหลดไลบรารี apache poi หากคุณใช้ eclipse ให้คลิกขวาที่โปรเจ็กต์รูทของคุณดังนั้นคุณสมบัติและในเส้นทางการสร้าง java จึงเพิ่ม jar ภายนอกและอิมพอร์ตในไลบรารีเหล่านั้นในโปรเจ็กต์ของคุณ:

xmlbeans-2.6.0; ปอย - ooxml-schemas- ... ; ปอย - ooxml- ... ; ปอย - .... ;


0

ฉันต้องการไฟล์ต่อไปนี้สำหรับการใช้งานของฉัน:

  • POI-OOXML-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar (อยู่ในโฟลเดอร์ "lib" ของไฟล์ zip ที่คุณได้รับจาก apache)
  • curveapi-1.03.jar (ในโฟลเดอร์ "ooxml-lib")
  • POI-3.14-20160307.jar
  • POI-OOXML-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (ในโฟลเดอร์ "ooxml-lib")

(แต่พูดตามตรงฉันไม่แน่ใจว่าจำเป็นทั้งหมด ... ) มันค่อนข้างสับสนเล็กน้อยเพราะพวกเขาบรรจุแบบนั้น ฉันต้องการวางมันด้วยตนเองในโฟลเดอร์ "lib" ของฉันเองจากนั้นเพิ่มการอ้างอิง ...

Maven ดูเหมือนจะดาวน์โหลดมากกว่าที่ฉันต้องการเสมอดังนั้นฉันจึงวาง libaries / dlls และสิ่งต่างๆแบบนั้นด้วยตนเองเสมอ


Apache POI มีหน้าที่สะดวกในการอธิบายว่าขวดโหลใดที่จำเป็นสำหรับอะไรและทุกสิ่งที่คุณต้องการมาพร้อมกับการดาวน์โหลดไบนารีดังนั้นจึงไม่ต้องสับสนหรือเป็นปริศนา!
Gagravarr

หน้านั้นมีประโยชน์หากคุณจะใช้ Maven แต่ฉันต้องการเพิ่มการอ้างอิงด้วยตนเอง หน้าเว็บไม่แสดงรายการทุกอย่างแยกกัน บางคนไม่สามารถสังเกตเห็นได้ในเวลาสร้าง แต่คุณจะพบได้โดยการตรวจสอบข้อยกเว้นในเวลาทำงาน การใช้งานของฉันนำเข้าไฟล์ XLS และ XLSX ลงใน jtable ข้างต้นดูเหมือนจะเป็นสิ่งที่จำเป็นสำหรับสิ่งนั้น
pcalkins

1
ทุกสิ่งที่แสดงอยู่ในการดาวน์โหลดไบนารี! ทั้งสิ่งที่จำเป็นต้องมีส่วนประกอบและสิ่งที่ต้องพึ่งพา
Gagravarr

0

หลังจากลองทำหลาย ๆ อย่างแล้วสิ่งที่ได้ผลคือ 1. ดาวน์โหลด "poi" และ "poi-ooxml" ด้วยตนเอง 2. เพิ่ม d / w jar เหล่านี้ลงใน "Maven Dependencies"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.