Не удается импортировать XSSF в Apache POI - PullRequest
110 голосов
/ 04 мая 2011

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

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

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

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

Любые идеи ??

Ответы [ 9 ]

176 голосов
/ 04 мая 2011

Для работы 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>
30 голосов
/ 04 мая 2011

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

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

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

7 голосов
/ 12 мая 2015

Если вы используете Maven:

poi => poi-ooxml in artifactId

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
    </dependency>
6 голосов
/ 24 мая 2017

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

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

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

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

3 голосов
/ 12 октября 2018

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

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
2 голосов
/ 08 мая 2015

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();
}​
1 голос
/ 17 мая 2018

У меня была такая же проблема, поэтому я копался в файле poi-3.17.jar, и внутри пакета не было пакета xssf.

Затем я просмотрел другие файлы и нашел xssf в poi-ooxml-3.17.jar

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

poi-ooxml-3.17.jar

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

0 голосов
/ 11 марта 2016

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

  • 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 всегда загружает больше, чем мне нужно, поэтому я всегда помещаю библиотеки / библиотеки DLL и тому подобное вручную.

0 голосов
/ 20 ноября 2015

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

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

...