编写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这个必需的类。
具体解决步骤
下载对应的依赖jar包
POI 4.1.2要求依赖commons-collections4的版本至少为4.1,推荐下载4.4版本(和POI 4.1.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
相关产品推荐
相关产品推荐

