无法在Apache POI中导入XSSF


121

我引用的是Apache POI的3.7版,执行此操作时出现“无法解决”错误:

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

其他引用POI的导入语句不会给我错误,例如:

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

有任何想法吗??


我遇到了同样的问题,它似乎植根于poi-3.whatever.jar文件中,出于某种原因而没有将xssf打包在其中
Redstoner先生,

Answers:


197

为了使OOXML正常工作,您需要将POI-OOXML jar与POI jar分开包装。

从以下位置下载POI-OOXML jar-

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),我只需要添加一个额外的jar:poit-ooxml-3.11-20141221.jar。我没有意识到他们之间没有联系。感谢您的回答Pushkar +1。
2015年

32

OOXML文件格式的类(例如,用于.xlsx的XSSF)位于另一个Jar文件中。您需要在项目中包括poi-ooxml jar及其依赖项

你可以得到所有的组件和它们的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 jar和依赖项。如果要使用非电子表格格式,则也要依赖poi-scratchpad工件,如POI组件页面上所述


10

我在应用程序“ build.gradle”中添加了以下内容

implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'

这确实有帮助
Abror Esonaliyev

8

如果您使用Maven:

poi => poi-ooxml在artifactId中

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

我建议使用POI 3.12最后(3.12),而不是测试版
Gagravarr

6

问题:导入“ org.apache.poi.xssf.usermodel.XSSFWorkbook”类时,在日食中显示错误。

解决方案:使用此Maven依赖关系可以解决此问题:

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

-哈里·克里希纳·内埃拉


2

1)从POI文件夹导入所有JARS 2)从POI文件夹的子目录ooxml文件夹导入所有JARS 3)从lib文件夹(POI文件夹的子目录)导入所有JARS

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软件包。

然后,我浏览了其他文件,并在poi-ooxml-3.17.jar中找到了xssf。

所以看来解决方案是添加

poi-ooxml-3.17.jar

到您的项目,因为这似乎使它起作用(至少对我而言)


0

您没有描述环境,无论如何,您应该下载apache poi库。如果您使用的是eclipse,请右键单击您的根项目,以便在Java构建路径中的属性和属性添加外部jar并将这些库导入您的项目中:

xmlbeans-2.6.0; poi-ooxml-schemas- ...; poi-ooxml- ...; poi- ....;


0

我需要以下文件来实现:

  • poi-ooxml-schemas-3.14.20160307.jar
  • commons-codec-1.10.jar(位于您从apache获取的zip文件的“ lib”文件夹中)
  • 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似乎总是下载比我需要的更多的东西,因此我总是手动放置libaries / dll和类似的东西。


Apache POI 提供了一个方便的页面,该页面解释了什么需要什么罐子,并且所需的所有内容都在二进制下载中,因此不必造成混淆或迷惑!
Gagravarr '16

如果您要使用Maven,则该页面很方便,但是我更喜欢手动添加依赖项。该页面没有单独列出所有内容。其中一些在构建时并不明显,但是您可以通过在运行时检查异常来找到它们。我的实现将XLS和XLSX文件导入到jtable中。以上似乎就是为此所需要的。
pcalkins

1
二进制下载中列出了所有列出的内容!组件需要哪些罐子以及罐子需要什么依赖项
Gagravarr

0

在尝试了多种方法之后,真正起作用的是:1.手动下载“ poi”和“ poi-ooxml” 2.将这些d / w jar添加到“ Maven Dependencies”中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.