You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Excel文件时遭遇java.lang.NoClassDefFoundError错误求助

解决java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap问题

这个错误的根源非常清晰——你的项目缺少了POI 4.1.2依赖的Apache Commons Collections 4.x库,导致JVM在运行时找不到org.apache.commons.collections4.ListValuedMap这个必需的类。

具体解决步骤

  1. 下载对应的依赖jar包
    POI 4.1.2要求依赖commons-collections4的版本至少为4.1,推荐下载4.4版本(和POI 4.1.2兼容性良好)。

  2. 添加到项目类路径
    在NetBeans中操作:

    • 右键点击你的项目 → 选择「库」
    • 点击「添加JAR/文件夹」,选中你下载好的commons-collections4-x.x.jar文件,确认添加即可。

额外的代码优化提示

顺便看了下你的测试代码,发现两处小问题会导致Excel写入异常:

  • 循环ResultSet时,每次都执行row = spreadSheet.createRow(1),会不断覆盖第1行的标题内容;
  • resultSetMetaData.getColumnName(i)的参数是从1开始的,但你的循环i从0开始,会抛出索引越界异常。

可以修改成这样:

// 标题行用第1行
XSSFRow row = spreadSheet.createRow(1);
// 写入标题(注意ResultSetMetaData的列索引从1开始)
for(int i=0; i<resultSetMetaData.getColumnCount(); i++) {
    cell = row.createCell(i);
    cell.setCellValue(resultSetMetaData.getColumnName(i+1));
}

// 数据行从第2行开始,用计数器递增避免覆盖
int dataRowNum = 2;
while(resultSet.next()) {
    row = spreadSheet.createRow(dataRowNum++);
    cell = row.createCell(0);
    cell.setCellValue(resultSet.getString(1));
    cell = row.createCell(1);
    cell.setCellValue(resultSet.getString(2));
    cell = row.createCell(2);
    cell.setCellValue(resultSet.getString(3));
}

内容的提问来源于stack exchange,提问作者Erfan Bashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:17:35