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.jar
或 poi-ooxml-full-5.2.1.jar
.
一起使用
为了避免冲突,在 运行 apache poi
代码时,应从 class 路径中排除所有不匹配版本的 jar。
因此,在您使用 apache poi 5.2.1
的情况下,除了 poi-ooxml-lite-5.2.1.jar
或 poi-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.jar
是poi-ooxml-full-5.*.jar
的旧版本,也不能和apache poi 5
一起使用。
我正在尝试在 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.jar
或 poi-ooxml-full-5.2.1.jar
.
为了避免冲突,在 运行 apache poi
代码时,应从 class 路径中排除所有不匹配版本的 jar。
因此,在您使用 apache poi 5.2.1
的情况下,除了 poi-ooxml-lite-5.2.1.jar
或 poi-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.jar
是poi-ooxml-full-5.*.jar
的旧版本,也不能和apache poi 5
一起使用。