线程“主”java.lang.NoSuchFieldError 中出现异常:Factory

问题描述 投票:0回答:6

最近将 POI jar 版本从 3.17 升级到 5.1 以及在 3.x 中工作的以下代码现在已损坏,( jdk 1.8 )

以下是使用的Jar组

下面是我的存根:

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
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;
public class ReadExcelDemo 
{
    public static void main(String[] args) 
    {
        try
        {
            FileInputStream file = new FileInputStream(new File("D:\\TemporaryUploadContainer\\61C50E5C2395C7FB48499BCFDD797F15_QuickCartExample.xlsx"));
 
            //Workbook workbook1 = WorkbookFactory.create(file);
            //Sheet sheet1 = workbook1.getSheetAt(0);
                        
            XSSFWorkbook workbook = new XSSFWorkbook(file);
            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 NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "t");
                            break;
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "t");
                            break;
                    }
                }
                System.out.println("");
            }
            file.close();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

以下错误:

Workbook workbook1 = WorkbookFactory.create(file);

线程“main”中的异常java.lang.NoSuchFieldError:Factory 在 org.apache.poi.xssf.model.ThemesTable。(ThemesTable.java:86) 在 org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) 在 org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:661) 在 org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:165) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:275) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:296) 在测试.XLSXReaderWriterP21.readRecordsFromFile(XLSXReaderWriterP21.java:76) 在测试.XLSXReaderWriterP21.main(XLSXReaderWriterP21.java:57)

以下错误:

XSSFWorkbook workbook = new XSSFWorkbook(file);

线程“main”中的异常java.lang.NoSuchFieldError:Factory 在 org.apache.poi.xssf.model.ThemesTable。(ThemesTable.java:86) 在 org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) 在 org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:661) 在 org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:165) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:275) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:296) 在 test.ReadExcelDemo.main(ReadExcelDemo.java:26)

java apache-poi xlsx
6个回答
18
投票

我也有同样的问题。 尝试删除 poi-ooxml-schemas-4.1.2.jar,并添加 poi-ooxml-lite-5.2.1.jar


5
投票

当我尝试使用 Netbeans 时,我也遇到了同样的问题:

XSSFWorkbook workbook = new XSSFWorkbook(fis);

Workbook workbook = WorkbookFactory.create(inputFile);

我解决了将 poi-ooxml-schemas-4.1.2.jar 更改为 poi-ooxml-lite-5.2.2.jar 的问题


0
投票

我认为您只需要调整到与此 poi 相同的版本即可符合此常见问题解答https://poi.apache.org/help/faq.html#faq-N10204


0
投票

org.apache.poi:poi-ooxml
org.apache.poi:poi-ooxml
从版本
4.1.2
更新到
5.2.2
后,我遇到了同样的问题。

那是因为

com.monitorjbl:xlsx-streamer:2.1.0
带来了
poi-ooxml-schemas-4.1.2.
作为依赖项。

所以我用它的叉子

com.monitorjbl:xlsx-streamer:2.1.0
更新了过时的
com.github.pjfanning:excel-streaming-reader:4.0.4

  <dependency>
    <groupId>com.github.pjfanning</groupId>
    <artifactId>excel-streaming-reader</artifactId>
    <version>4.0.4</version>
  </dependency>

0
投票

我正在使用 XWPFDocument doc = new XWPFDocument(fis)

显示以下错误

目标 [ognl.MethodFailedException: 对象 com.dots.action.getDotsMissionAction@34f2ba1a [java.lang.NoSuchFieldError:Factory]] 或包的目标类 [class ognl.MethodFailedException] 的包 [package ognl] 失败成员 [public java.lang.String java.lang.Throwable.getMessage()] 的 [package java.lang,Java Platform API 规范,版本 1.8] 被排除!

我有 poi-5.2.2、poi-ooxml-5.2.3、poi-ooxml-full-5.2.5、poi-scratchpad-5.2.2。敬请指教。


-1
投票
嘿,刚刚遇到了和你一样的问题。 通过添加以下依赖项解决了这个问题。

poi-4.1.2.jar poi-ooxml-4.1.2.jar poi-ooxml-schemas-4.1.2.jar xmlbeans-3.1.0.jar


正如其他评论所建议的,poi-jars应该是相同的版本,否则它将无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.