Exception in thread "main" java.lang.NoSuchFieldError: Factory question

Exception in thread "main" java.lang.NoSuchFieldError: Factory question

我正在尝试在 Java 中测试 xml 到 excel 的转换器,但出现以下异常情况

Exception in thread "main" java.lang.NoSuchFieldError: Factory
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:475)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:232)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:226)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:214)
    at xmlToExcel.Converter.initXls(Converter.java:135)
    at xmlToExcel.Converter.getAndReadXml(Converter.java:60)
    at xmlToExcel.Converter.main(Converter.java:36)

异常指的是这一行:

  workbook = new XSSFWorkbook();

这是我目前的罐子

我该如何解决这个问题?罐子里有冲突吗?

编辑 1:这是初始化 POI 工作簿并写入 header 行的方法的代码

    workbook = new XSSFWorkbook();

    CellStyle style = workbook.createCellStyle();
    Font boldFont = workbook.createFont();
    boldFont.setBold(true);
    style.setFont(boldFont);
    style.setAlignment(HorizontalAlignment.CENTER);

    Sheet sheet = workbook.createSheet();
    rowNum = 0;
    Row row = sheet.createRow(rowNum++);
    Cell cell = row.createCell(SUBSTANCE_NAME_COLUMN);
    cell.setCellValue("Substance name");
    cell.setCellStyle(style);

异常引用了第一行,工作簿的创建。

在使用 apache poi 从不 混合不同版本的 jar。参见 faq-N10204

所以当使用 apache poi 版本 5.2.1 all apache poi jar 需要来自那个版本。所以在你的情况下 apache poi 5.2.1 不能与 poi-ooxml-schemas-4.1.2.jar 一起使用。它需要与 poi-ooxml-lite-5.2.1.jarpoi-ooxml-full-5.2.1.jar.

一起使用

为了避免冲突,在 运行 apache poi 代码时,应从 class 路径中排除所有不匹配版本的 jar。

因此,在您使用 apache poi 5.2.1 的情况下,除了 poi-ooxml-lite-5.2.1.jarpoi-ooxml-full-5.2.1.jar 之外,class 路径中不应有任何 poi-ooxml-schemas-4.1.2.jar。此外,在使用 apache poi 5 时,ooxml-schemas-1.4.jar 不应位于 class 路径中。 ooxml-schemas-1.4.jarpoi-ooxml-full-5.*.jar的旧版本,也不能和apache poi 5一起使用。