Невозможно импортировать XSSF в Apache POI

121

Я имею в виду версию 3.7 POI Apache и получаю сообщение об ошибке «не может быть разрешено»:

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

Другие операторы импорта, которые ссылаются на POI, НЕ дают мне ошибок, например:

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

Любые идеи??

Марк Джексон
источник
У меня возникла та же проблема, похоже, она коренится в файле poi-3.whatever.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.
Clint L
32

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

Вы можете получить список всех компонентов и их зависимостей на сайте POI здесь .

Что вы, вероятно, захотите сделать, так это загрузить бинарный пакет 3.11 , получить poi-ooxmlот него jar- файл и зависимости в 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.

Gagravarr
источник
10

Я добавил ниже содержимое в приложение "build.gradle"

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
Данг Тхач Хай
источник
это действительно помогло
Аброр Эсоналиев
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) вместо бета-версии
Гаграварр
6

Проблема: при импорте класса org.apache.poi.xssf.usermodel.XSSFWorkbook отображается ошибка в eclipse.

Решение: используйте эту зависимость maven для решения этой проблемы:

<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 в файле poi-ooxml-3.17.jar.

Кажется, решение состоит в том, чтобы добавить

poi-ooxml-3.17.jar

к вашему проекту, так как это, кажется, заставляет его работать (по крайней мере, для меня)

Мистер редстонер
источник
0

Вы не описали среду, в любом случае вам следует скачать библиотеки apache poi. Если вы используете eclipse, щелкните правой кнопкой мыши корневой проект, чтобы в свойствах и в пути сборки java добавить внешнюю банку и импортировать в свой проект эти библиотеки:

xmlbeans-2.6.0; poi-ooxml-schemas- ...; poi-ooxml- ...; пои ....;

откровенный
источник
0

Для моей реализации мне потребовались следующие файлы:

  • пои-OOXML-схемы-3.14.20160307.jar
  • commons-codec-1.10.jar (он находился в папке "lib" zip-файла, который вы получаете от apache)
  • curveapi-1.03.jar (в папке "ooxml-lib")
  • пои-3.14-20160307.jar
  • пои-OOXML-3.14-20160307.jar
  • xmlbeans-2.6.0.jar (в папке "ooxml-lib")

(хотя, честно говоря, я не совсем уверен, что все они необходимы ...) Это немного сбивает с толку, потому что они так упакованы. Мне нужно было поместить их вручную в мою собственную папку «lib», а затем добавить ссылки ...

Кажется, что Maven всегда загружает больше, чем мне нужно, поэтому я всегда размещаю библиотеки / dll и тому подобное вручную.

pcalkins
источник
Apache POI предоставляет удобную страницу, объясняющую, какие jar-файлы для чего нужны , и все, что вам нужно, входит в двоичную загрузку, поэтому это не должно сбивать с толку или загадку!
Gagravarr
эта страница удобна, если вы собираетесь использовать Maven, но я предпочитаю добавлять зависимости вручную. На странице не все перечислено отдельно. Некоторые из них не заметны во время сборки, но вы найдете их, проверив исключения во время выполнения. Моя реализация импортирует файлы XLS и XLSX в jtable. Вышесказанное казалось всем, что для этого требовалось.
pcalkins
1
Все, что там указано, поставляется в виде двоичного файла! И какие
jar-файлы
0

После нескольких попыток, что действительно сработало: 1. загрузка «poi» и «poi-ooxml» вручную 2. добавление этих d / w jar-файлов в «зависимости Maven»

Санчи Тьяги
источник