Неможливо імпортувати XSSF в POI Apache


121

Я посилаюся на версію 3.7 POI Apache, і я отримую помилку "неможливо вирішити", коли я це роблю:

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

Інші заяви про імпорт, на які посилається POI НЕ дають мені помилок, таких як:

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

Будь-які ідеї ??


У мене виникала така ж проблема, схоже, вона вкорінена у файлі poi-3.wever.jar, який чомусь не запакував xssf
містер Редстонер,

Відповіді:


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. Я не здогадувався, що між ними немає зв’язки. Дякуємо за відповідь Пушкар +1.
Клінт L

32

Класи форматів файлів OOXML (наприклад, XSSF для .xlsx) знаходяться в іншому файлі Jar. Вам потрібно включити в проект проект банку poi-ooxml разом із залежностями

Список усіх компонентів та їх залежностей ви можете отримати на веб-сайті POI тут .

Можливо, ви хочете зробити, це завантажити двійковий пакет 3,11 , захопити poi-ooxmlз нього банку та залежності в ooxml-libкаталозі. Імпортуйте їх у свій проект, і ви будете відсортовані.

Якщо ви використовуєте Maven, ви можете побачити тут список артефактів, від яких ви хочете залежати, але він хотів би бути чимось на зразок:

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

Залежність від poi-ooxml maven потягнеться в основну банку POI і залежність від вас автоматично. Якщо ви хочете працювати з форматами, які не використовуються в електронних таблицях, ви також хочете залежати від poi-scratchpadартефакту, як це детально описано на сторінці компонентів POI



8

Якщо ви використовуєте Maven:

poi => poi-ooxml в артефактіd

    <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" відображається помилка у затемненні.

Рішення: Використовуйте цю залежну залежність для вирішення цієї проблеми:

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

-Хари Кришна Неела


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 build додайте зовнішню банку та імпортуйте у свій проект ті бібліотеки:

xmlbeans-2.6.0; poi-ooxml-схеми- ...; poi-ooxml- ...; poi- ....;


0

Для моєї реалізації мені потрібні були такі файли:

  • poi-ooxml-схеми-3.14.20160307.jar
  • commons-codec-1.10.jar (це було в папці "lib" zip-файлу, який ви отримуєте від apache)
  • curvesapi-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 завжди завантажує більше, ніж мені потрібно, тому я завжди розміщую бібліотеки / dll та подібні речі вручну.


POI Apache надає зручну сторінку, в якій пояснюється, які банки потрібні для чого , і все, що вам потрібно, відбувається у двійковому завантаженні, тому це не повинно бути заплутаним чи загадкою!
Гаграварр

ця сторінка зручна, якщо ви збираєтесь використовувати Maven, але я вважаю за краще додавати залежності вручну. На сторінці не вказано все окремо. Деякі з них не помітні під час збирання, але ви знайдете їх, перевіряючи винятки під час виконання. Моя реалізація імпортує XLS та XLSX файли в jtable. Згадане вище здавалось усім необхідним для цього.
pcalkins

1
Все, що перераховано там, поставляється у двійковому завантаженні! Як те, які банки потрібні компонентам, так і залежність, яку банки потребують
Gagravarr

0

Після спробу декількох речей, що справді спрацювало: 1. завантаження "poi" та "poi-ooxml" вручну 2. додавання цих d / w баночок у "Maven Dependitions"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.