无法在 ApachePOI 中导入 XSSF

我引用了 Apache POI 的3.7版本,当我这样做时,我得到了一个“无法解决”的错误:

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

引用 POI 不要的其他导入语句给出了错误,例如:

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

有什么想法吗?

229760 次浏览

为了使 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>

OOXML 文件格式的类(例如。Xlsx)位于另一个 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 组件页

1)从 POI 文件夹中导入所有罐子 2)从 ooxml 文件夹导入 POI 文件夹的子目录下的所有 JARS 文件 3)从 POI 文件夹的子目录 lib 文件夹中导入所有 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();
}​

如果你使用 Maven:

ArtifactId 中的 poi = > poi-ooxml

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

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

Xmlbeans-2.6.0; poi-ooxml-schema-... ; poi-ooxml-... ; poi-... ; ;

我需要以下文件来实现:

  • Poi-ooxml-schema-3.14.20160307. jar
  • Commons-codec-1.10.jar (这在您的 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 似乎总是下载超过我需要的东西,所以我总是手动放置库/dll 之类的东西。

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

解决方案: 使用此 maven 依赖项解决此问题:

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

哈里 · 克里希纳 · 尼拉

我遇到了同样的问题,所以我仔细查看了 poi-3.17.jar 文件,发现里面没有 xssf 包。

然后我浏览了其他文件,发现 xssf 在 poi-ooxml-3.17. jar 中

所以看起来解决方案是

poi-ooxml-3.17.jar

你的项目,因为这似乎使它工作(至少对我来说)

我在 app“ build.gradle”中添加了以下内容

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

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

我找到解决办法了,伙计们

你需要记住一些观点。

  1. 有两种不同的依赖关系,一种是(Poi) ,另一种是(< strong > poi- Ooxml ) ,但要确保在代码中必须使用 poi-ooxml 依赖项

  2. 只需在 pom.xml 中添加以下依赖项并保存它。

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

3. 在保存 pom.xml 之后,您需要尝试一件小事,使用 (.)操作符将尝试导入/获取它 & 最终将不会看到任何类型的错误 因为现在它已经在你的包里导入了那个东西。

更好地理解示例代码! !

package ReadFile;// package
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  // automatically added to your code after importing
public class Test
{
public static void Hello() // Method
{
XSSFWorkbook workbook = new XSSFWorkbook();
}
}

我尽我最大的努力给你解决方案,如果你在这里面临任何问题的意见,我会尝试
来解决这个问题。

继续学习伙计们! !

2021年11月6日实际日期:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.1.0</version>
</dependency>


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

如果你使用 Maven:

添加 poi 和 poi-ooxml 依赖项使其工作:)

<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-ooxml.version}</version>
</dependency>

首先,您需要在 pom.xml 中添加以下依赖项:

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


<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>

注意: 如果您的项目仍然无法找到依赖项,请在您的模块-info. java 中添加以下代码行:

requires poi.ooxml;