使用POI创建XSSFWorkbook时出现NoClassDefFoundError报错求助
无Maven环境下实现Java写Excel的解决方案
方案1:补全依赖解决POI运行报错
你遇到的org/apache/logging/log4j/LogManager报错是因为高版本POI默认依赖Log4j2日志框架,手动导入jar包时没有补全所有依赖导致的。你不需要用Maven,只需按以下要求下载所有必需jar包导入项目即可:
- 下载同一版本的POI核心包:
poi.jar、poi-ooxml.jar、poi-ooxml-lite.jar(仅写入需求用lite包即可,无需full包) - 下载对应POI版本要求的Log4j2包:
log4j-api.jar、log4j-core.jar - 下载POI必需的公共依赖包:
commons-collections4.jar、commons-io.jar、commons-math3.jar、xmlbeans.jar
所有jar包下载完成后,放入项目的依赖目录,添加到项目构建路径后即可正常运行POI代码。极简写入示例如下:
// 写入单个数字到Excel示例 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("工作表1"); sheet.createRow(0).createCell(0).setCellValue(12345); // 第一行第一列写入数字12345 try (FileOutputStream out = new FileOutputStream("测试文件.xlsx")) { workbook.write(out); } finally { workbook.close(); }
注意:不要混用不同大版本的POI相关依赖,否则会出现类冲突报错。
方案2:零依赖替代方案(推荐初学者使用)
如果你仅需要写入数字等简单内容,完全不需要引入POI等重型框架,直接生成CSV格式文件即可,CSV文件可以直接用Excel打开,完全满足你的需求,不需要任何第三方依赖,示例代码如下:
try (FileWriter writer = new FileWriter("测试文件.csv")) { // 每行内容用逗号分隔,换行就是新的行 writer.write("数值列\n"); // 表头行 writer.write("123\n"); // 第一行写入数字123 writer.write("456\n"); // 第二行写入数字456 } catch (IOException e) { e.printStackTrace(); }
生成的csv文件直接双击就能用Excel打开,写入逻辑简单,完全不会出现依赖缺失报错。
内容的提问来源于stack exchange,提问作者Jordy van Dongen
相关产品推荐
相关产品推荐

