Как исправить NoClassDefFoundError при создании электронной таблицы Excel с использованием Apache POI в Java? - PullRequest
0 голосов
/ 13 мая 2019

Я только начал изучать 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) curveapi-1.06.jar

И я использую jdk 1.8 для NetBeans

PS У меня практически нет опыта работы с Apache POI, поэтому я был бы благодарен, если бы вы написали подробный ответ. Спасибо

PPS Я не знаю, Maven

Редактировать: Итак, я изменил несколько вещей

1) Я импортировал все файлы JAR из "общих коллекций".

2) Я изменил «.xls» на «.xlsx»

3) Я также импортировал «common-compress» и теперь он работает отлично,Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Сообщение об ошибке гласит: java.lang.NoClassDefFoundError: org / apache / commons / collection4 / ListValuedMap

Это из библиотеки Apache commons-collection4.https://commons.apache.org/proper/commons-collections/ Кажется, у вас нет этой библиотеки в вашем пути к классам.

Для maven используйте эту зависимость:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.3</version>
</dependency>
2 голосов
/ 13 мая 2019

Эта ошибка будет выдана, если виртуальная машина 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();
	}	
}
...