Apache Poi 3.13 не может найти классы для открытия файлов XLSX

Я использую Apache POI для чтения и записи файлов Excels с Java, но я не могу найти WorkbookFactory, ни XSSFWorkbook в источниках для чтения файлов xlsx.

пом.в XML :

<poi.version>3.13</poi.version>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>

Я не могу найти ни одной информации в журнале изменений Apache poi, которая могла бы привести к такому поведению.

редактировать: Здесь моя реализация (просто простой метод для момент)

public static HSSFSheet getXLSSheet(String fileName, int sheetIndex) throws IOException {
    InputStream inputStream = new FileInputStream(fileName);
    HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
    return workbook.getSheetAt(sheetIndex);
}

Я попытался открыть файл XLSX, но поскольку я не могу найти два других класса( WorkbookFactory или XSSFWorkbook), я ожидал, что у меня будет такая ошибка:

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

спасибо заранее.

2 ответов


во-первых, я могу заверить вас, что WorkbookFactory и XSSFWorkbook классы содержатся в POI-OOXML 3.13 jars, как документально на сайте POI

$ unzip -l .m2/repository/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar | grep WorkbookFactory
  6041  2015-09-22 00:22   org/apache/poi/ss/usermodel/WorkbookFactory.class

однако, как показывает опубликованное вами исключение, ваш код никогда не будет работать для XLSX файлы, его нужно изменить. Ну, для этого и некоторых других вопросов тоже... например!--13-->не используйте InputStream, если у вас есть файл

ваш код должен быть больше например:

import java.io.File;
import org.apache.poi.ss.usermodel.*;

public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException {
   File file = new File(fileName);
   Workbook workbook = WorkbookFactory.create(file);
   return workbook.getSheetAt(sheetIndex);
}

это будет работать для обоих xls и xlsx файлов, и будет меньше памяти, чем при использовании входного потока. До тех пор, пока вы говорите maven зависеть от poi-ooxml jar, вы получите все другие зависимости, которые вам нужны автоматически


XSSFWorkbook представлен в версии 3.11 Apache POI.

исходный код Apache POI

попробуйте использовать эту версию Apache poi.

кроме того, он все еще присутствует в багажнике:

исходный код Apache POI

Я считаю, что проблема заключается в локальном хранилище maven. попробуйте удалить poi folederes из локального репозитория maven и повторно загрузить зависимости.

также постарайтесь не забыть изменить все HSSFWorkbook до XSSFWorkbook, потому что XLSX файлы открываются через XSSFWorkbook только.