JAVA POI предоставленные данные отображаются в Office 2007 + XML

Я получаю эту ошибку:

org.апаш.ПОИ.poifs.файловая система.OfficeXmlFileException: предоставленные данные отображаются в Office 2007 + XML. Вы вызываете часть POI, которая имеет дело с документами Ole2 Office. Вам нужно вызвать другую часть POI для обработки этих данных (например, XSSF вместо HSSF)

Я прочитал throw Google, и я узнал, что мне нужно использовать XSSF вместо HSSF, потому что мой файл Excel-xlsx, но, как вы видите в моем maven, я уже использую xlsx. Где я ошибся, пожалуйста?

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

код делает исключение:

POIFSFileSystem fs;

            fs = new POIFSFileSystem(new FileInputStream(getFilePath()));

мой новый код

public void getBColum() {
    try {
        OPCPackage fs;

        fs = new OPCPackage.open(new File(getFilePath()));

        XSSFWorkbook wb = new XSSFWorkbook(fs);
        XSSFSheet sheet = wb.getSheet("Master column name - Used Car");
        XSSFRow row;
        CellReference cr = new CellReference("A1");
        row = sheet.getRow(cr.getCol());
        System.out.println(row.getCell(3));
    } catch (FileNotFoundException e) {
        if (logger.isDebugEnabled()) {
            logger.debug("How can this error be possible? we should have already thrown an exception in the construction");
        }
    } catch (IOException e) {
        logger.error(String.format("Exception in reading the file: %s",
                e.getMessage()));
    }
}

у меня есть ошибка компиляции в new oPCPackage.open что:

OPCPackage.open не может быть разрешен для типа

1 ответов


по словам Apache POI краткое руководство, the POIFSFileSystem (или аналогично, NPOIFSFileSystem) используется только при .документы xls (версии Excel до 2003).

эквивалент для .документы xlsx (Excel 2007+) - это OPCPackage.

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));

вы можете создать XSSFWorkbook С OPCPackage:

XSSFWorkbook wb = new XSSFWorkbook(pkg);

или вы можете просто создать его прямо:

XSSFWorkbook wb = new XSSFWorkbook(new File("file.xlsx"));

обычно лучше создать книгу с помощью File вместо InputStream, чтобы сохранить память.

кроме того, если вы хотите код, который не волнует, является ли это .xls или an .XLSX-файл:

// or "file.xlsx"
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));