在Java中使用Apache POI创建Excel电子表格时,如何修复NoClassDefFoundError?

时间:2019-05-13 07:36:07

标签: java apache-poi

我刚刚开始学习Apache POI,我想在excel中制作一个像这样的超级简单的电子表格,

+----------+----------+----------+----------+----------+
|    1     |    2     |    3     |    4     |    5     |
+----------+----------+----------+----------+----------+

我写的代码如下,

public void exportTable() throws IOException
{
    FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\*****\\OneDrive\\Desktop\\excel.xlsx"));
    XSSFWorkbook wb=new XSSFWorkbook();
    XSSFSheet ws=wb.createSheet();
    XSSFRow row=ws.createRow(0);
    for(int i=0;i<=5;i++)
    {
        Cell cell=row.createCell(i);
        cell.setCellValue(i);
    }
    wb.write(fos);
    fos.close();
}

我收到一个NoClassDefFoundError

我正在使用以下jar文件。

1)poi-4.1.0.jar

2)poi-examples-4.1.0.jar

3)poi-excelant-4.1.0.jar

4)poi-ooxml-4.1.0.jar

5)poi-ooxml-schemas-4.1.0.jar

6)poi-scratchpad-4.1.0.jar

7)xmlbeans-3.1.0.jar

8)curvesapi-1.06.jar

我正在netbeans上使用jdk 1.8

P.S。我对Apache POI的经验几乎为零,所以如果您能写详细的答案,我将不胜感激。谢谢

P.P.S。 我不认识Maven

编辑:所以我做了几件事

1)我从“ common-collections”中导入了所有jar文件。

2)我将“ .xls”更改为“ .xlsx”

3)我也导入了“ common-compress”,现在可以正常工作了。谢谢!

2 个答案:

答案 0 :(得分:2)

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分),并且没有定义,则将抛出该错误可以找到该班级的。

只需将目标文件扩展名更改为.xlsx,它就可以正常工作。

  

我建议您不要添加jar文件,而只是转换为maven项目。 Maven项目非常棒,可以进行项目和依赖项管理。

并为apache POI添加以下依赖项

<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-collections4</artifactId>
 <version>4.0</version>
</dependency>

现在,您可以轻松使用XSSFWorkbook。请看下面的代码,以供您参考,从我的角度来看,它工作正常。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestXSSF {
	static XSSFWorkbook workbook;
	static FileInputStream file;

	public static void main(String args[]) throws IOException {
		FileOutputStream fos=new FileOutputStream(new File(System.getProperty("user.dir")+"/input_data/excel.xlsx"));

		XSSFWorkbook wb=new XSSFWorkbook();
		XSSFSheet ws=wb.createSheet();
		XSSFRow row=ws.createRow(0);
		for(int i=0;i<=5;i++)
		{
			Cell cell=row.createCell(i);
			cell.setCellValue(i);
		}
		wb.write(fos);
		fos.close();
	}	
}

答案 1 :(得分:2)

错误消息指出: java.lang.NoClassDefFoundError:org / apache / commons / collections4 / ListValuedMap

那是来自Apache的commons-collections4库。 https://commons.apache.org/proper/commons-collections/ 看来您的课程路径上没有这个库。

对于maven,请使用以下依赖项:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.3</version>
</dependency>