在 java 中读取 Excel sheet 时出现 NoSuchFieldError
NoSuchFieldError when reading Excel sheet in java
我遵循了使用 Apache POI XSSF 构建工作簿的简单指南。按照相同的指南,我能够写一个 Excel sheet,但是当我试图从其中读取时,我收到了代码后显示的错误。
代码:
try {
FileInputStream file = new FileInputStream(new File("howtodoinjava_demo.xlsx"));
// Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
// Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
// Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// Check the cell type and format accordingly
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println("");
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
错误输出:
Exception in thread "main" java.lang.NoSuchFieldError:
RAW_XML_FILE_HEADER at
org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:179)
at
org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:228)
at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:93)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:294)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) at
org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:273)
at com.wtolliver.spring.test.ReadExcel.readExcel(ReadExcel.java:18)
at com.wtolliver.spring.test.App.main(App.java:17)
环顾四周后。我浏览了 documentation for APACHE POI,发现这是常量之一(我不知道那是什么意思)。
但最终,我意识到我使用的所有教程都是 2014 年之前的。
因此,我刚刚将 apache-poi
和 poi-ooxml
.
这两个依赖项的 Maven POM 更改为版本 3.11
现在可以使用了。
我遇到了同样的错误,请尝试将 XSSFWorkbook 声明更改为 HSSFWorkbook。它对我有用。
我用不同的常量得到了同样的错误:
Exception in thread "main" java.lang.NoSuchFieldError
: RETURN_NULL_AND_BLANK
用谷歌搜索了很多但没有答案。我使用的是 apache poi-ooxml
3.11 版。后来我换了3.17版本。然后它工作正常。
希望这可能对某人有所帮助。
对于下面的错误"java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK"
请执行以下任务:将 APACHE POI 3.** 升级到最新版本在我的例子中我做了以下事情我之前使用的是 apache poi 3.09 后来我将 lib 升级到最新版本即 3.12及其作品!!
执行以下步骤,您的代码将正常运行,但要确保错误相同。
如果有人使用最新的 Apache POI 库,请确保添加这些依赖项并且它工作得很好。
<dependencies>
<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>
<!-- log4j is optional-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
Java 片段:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
public class Demo1 {
private static final Logger logger = LogManager.getLogger(Demo1.class);
public static void main(String[] args) {
try {
File file = new File("File location");
FileInputStream fis = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Iterator<Row> itr = sheet.iterator();
logger.info("The given file is");
while (itr.hasNext()) {
Row row = itr.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case STRING:
logger.info(cell.getStringCellValue());
break;
case NUMERIC:
logger.info(cell.getNumericCellValue());
break;
default:
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我遵循了使用 Apache POI XSSF 构建工作簿的简单指南。按照相同的指南,我能够写一个 Excel sheet,但是当我试图从其中读取时,我收到了代码后显示的错误。
代码:
try {
FileInputStream file = new FileInputStream(new File("howtodoinjava_demo.xlsx"));
// Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
// Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
// Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// Check the cell type and format accordingly
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "t");
break;
}
}
System.out.println("");
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
错误输出:
Exception in thread "main" java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER at org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:179) at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:228) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:93) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:294) at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:273) at com.wtolliver.spring.test.ReadExcel.readExcel(ReadExcel.java:18) at com.wtolliver.spring.test.App.main(App.java:17)
环顾四周后。我浏览了 documentation for APACHE POI,发现这是常量之一(我不知道那是什么意思)。
但最终,我意识到我使用的所有教程都是 2014 年之前的。
因此,我刚刚将 apache-poi
和 poi-ooxml
.
现在可以使用了。
我遇到了同样的错误,请尝试将 XSSFWorkbook 声明更改为 HSSFWorkbook。它对我有用。
我用不同的常量得到了同样的错误:
Exception in thread "main"
java.lang.NoSuchFieldError
: RETURN_NULL_AND_BLANK
用谷歌搜索了很多但没有答案。我使用的是 apache poi-ooxml
3.11 版。后来我换了3.17版本。然后它工作正常。
希望这可能对某人有所帮助。
对于下面的错误"java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK"
请执行以下任务:将 APACHE POI 3.** 升级到最新版本在我的例子中我做了以下事情我之前使用的是 apache poi 3.09 后来我将 lib 升级到最新版本即 3.12及其作品!!
执行以下步骤,您的代码将正常运行,但要确保错误相同。
如果有人使用最新的 Apache POI 库,请确保添加这些依赖项并且它工作得很好。
<dependencies>
<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>
<!-- log4j is optional-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
Java 片段:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
public class Demo1 {
private static final Logger logger = LogManager.getLogger(Demo1.class);
public static void main(String[] args) {
try {
File file = new File("File location");
FileInputStream fis = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Iterator<Row> itr = sheet.iterator();
logger.info("The given file is");
while (itr.hasNext()) {
Row row = itr.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case STRING:
logger.info(cell.getStringCellValue());
break;
case NUMERIC:
logger.info(cell.getNumericCellValue());
break;
default:
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}