8

我遵循了使用 Apache POI XSSF 构建工作簿的简单指南。按照相同的指南,我能够编写 Excel 工作表,但是当尝试从其中读取时,我收到代码后显示的错误。

代码:

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();
}

错误输出:

线程“主”java.lang.NoSuchFieldError 中的异常:org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:179) 处 org.apache.poi.openxml4j.opc.internal.ZipHelper 处的 RAW_XML_FILE_HEADER .openZipStream(ZipHelper.java:228) 在 org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:93) 在 org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:294)在 org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:273) 在 com.wtolliver.spring.test.ReadExcel。 com.wtolliver.spring.test.App.main(App.java:17) 上的 readExcel(ReadExcel.java:18)

4

5 回答 5

15

看了一圈之后。我浏览了APACHE POI 的文档,发现这是常量之一(我不知道这真正意味着什么)。

但最终,我意识到我使用的所有教程都是 2014 年之前的。

所以我只是将我的 Maven POM 更改为 3.11 版本,用于apache-poipoi-ooxml.

它现在工作。

于 2016-06-03T16:13:50.113 回答
3

我用不同的常数得到了同样的错误:

线程“main”中的异常java.lang.NoSuchFieldErrorRETURN_NULL_AND_BLANK

谷歌了很多,但没有答案。我使用的是 apache poi-ooxml3.11 版。后来我改成了3.17版。然后它工作正常。

希望这可能对某人有所帮助。

于 2017-11-07T12:26:58.230 回答
1

如果有人使用最新的 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();
        }
    }
}
于 2021-12-09T07:22:15.453 回答
0

我遇到了同样的错误,尝试将 XSSFWorkbook 声明更改为 HSSFWorkbook。它对我有用。

于 2017-03-21T02:42:50.233 回答
0

对于以下错误“java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK”

请执行以下任务:将 APACHE POI 3.** 升级到最新版本在我的情况下,我做了以下事情,我以前使用 apache poi 3.09,后来我将 lib 升级到最新版本,即 3.12 及其工作!

执行以下步骤,您的代码将确保错误应该相同。

于 2019-05-30T08:10:17.200 回答