我正在引用Apache POI的3.7版本,但在执行以下代码时出现“无法解析”的错误:
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
其他引用POI的导入语句不会给我带来错误,例如:
import org.apache.poi.ss.usermodel.*;
任何想法吗?我正在引用Apache POI的3.7版本,但在执行以下代码时出现“无法解析”的错误:
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
其他引用POI的导入语句不会给我带来错误,例如:
import org.apache.poi.ss.usermodel.*;
任何想法吗?要使用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-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组件页面。
我在应用程序的 "build.gradle" 文件中添加了以下内容。
implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
poi => 在artifactId中使用poi-ooxml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.12</version>
</dependency>
3.12
)而不是beta版本。 - Gagravarr我有解决方案
你需要记住以下几点:
有两个不同的依赖项,一个是(poi),另一个是(poi-ooxml),但请确保在代码中使用poi-ooxml依赖项。
只需在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();
}
}
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
截至2021年6月11日的实际情况:
<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>
1)从POI文件夹中导入了所有的JAR包。 2)从POI文件夹的子目录ooxml中导入了所有的JAR包。 3)从POI文件夹的子目录lib中导入了所有的JAR包。
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();
}
我曾经遇到过同样的问题,因此我查看了poi-3.17.jar文件,但是没有找到xssf包。
然后我查看了其他文件,并在poi-ooxml-3.17.jar中找到了xssf。
所以解决方法就是添加:
poi-ooxml-3.17.jar
添加到你的项目中,因为这似乎可以使其工作(至少对我来说是这样)