XLSX-File NoSuchMethodError

Sibo

Mitglied
Hallo Forum!

Ich bin gerade dabei, ein Java-Programm zur Auswertung von Excel-Files (.xlsx) zu schreiben. Dazu habe ich mir die Apache Poi-Library downgeloadet. Allerdings bekomme ich immer eine Fehlermeldung: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions;

In anderen Foren wurde geschrieben, dass dies durch ein Durcheinander der Versionen der importierten Libraries zustande kommt. Ich habe nun wirklich alles ausprobiert, mit allen Versionen, wie es im Internet oft gestanden ist. Nur bekomme ich immer diesen blöden Fehler.

Ich hoffe es kann mir irgendwer helfen?
 
Hi,
So global lässt es sich nicht sagen, wieso du die java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions; bekommst. Poste doch mal den Code, der dir diese Exception wirft. So können wir besser helfen ;-)
Ansonsten:
Auf dieser Seite findest du Beispiele: asf - Revision 1610416: /poi/trunk/src/examples/src/org/apache/poi/ss/examples. Vielleicht helfen dir diese weiter 🙂
 
Zuletzt bearbeitet:
Hey,

ich habe einen Beispiel-Code aus dem Internet:

Java:
public static void readFile() throws IOException
	{
		
		try {         
			FileInputStream file = new FileInputStream(new File("H:\\Arbeit\\Universum_Abzuege\\test3.xlsx"));

			//Get the workbook instance for XLS file
//			HSSFWorkbook workbook = new HSSFWorkbook(file);
			
			System.out.println("Hier 1");
			
			XSSFWorkbook workbook = new XSSFWorkbook (file); //Hier Fehler
			
			System.out.println("Hier 2");
			
			//Get first sheet from the workbook
			XSSFSheet sheet = workbook.getSheetAt(0);
			System.out.println("Sheet selected!");
			//Iterate through each rows from first sheet
			Iterator<Row> rowIterator = sheet.iterator();
			while(rowIterator.hasNext()) {
				Row row = rowIterator.next();
				//For each row, iterate through each columns
				Iterator<Cell> cellIterator = row.cellIterator();
				while(cellIterator.hasNext()) {
					Cell cell = cellIterator.next();
					switch(cell.getCellType()) {
					case Cell.CELL_TYPE_BOOLEAN:
						System.out.print(cell.getBooleanCellValue() + "\t\t");
						break;
					case Cell.CELL_TYPE_NUMERIC:
						System.out.print(cell.getNumericCellValue() + "\t\t");
						break;
					case Cell.CELL_TYPE_STRING:
						System.out.print(cell.getStringCellValue() + "\t\t");
						break;
						
					}
				}
				System.out.println("");
			}
			file.close();
			FileOutputStream out = new FileOutputStream(new File("H:\\Arbeit\\Universum_Abzuege\\test4.xlsx"));
					
			workbook.write(out);
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Der Fehler wird in dieser Zeile geworfen, in der versucht wird, eine neue XSSFWorkbook-Instanz zu erzeugen.
 
Hi,
Ich hab deinen Code mal probiert. Funktioniert ohne Probleme.
Welche poi- library verwendest du?
Kann es sein, dass die Excel- Datei: test3.xlsx nicht existiert, oder dass du keinen Zugriff auf das Verzeichnis hast? (H:\\Arbeit\\Universum_Abzuege\\)?
Schau mal ob du mit dieser Version eine Fehlermeldung bekommst. Wenn ja, muss der String für die Datei angepasst werden.
Java:
public static void readFile() throws IOException {
	try {  
		if(!new File("H:\\Arbeit\\Universum_Abzuege\\test3.xlsx").exists()) {
			System.err.println("Fehler, die Datei konnte nicht gefunden werden! Bitte den Pfad anpassen!");
			return;
		}
		
		FileInputStream file = new FileInputStream(new File("C:\\Users\\egi\\Desktop\\Test1.xlsx"));
							 
		XSSFWorkbook workbook = new XSSFWorkbook (file);
				  
		//Get first sheet from the workbook
		XSSFSheet sheet = workbook.getSheetAt(0);
		System.out.println("Sheet selected!");
		//Iterate through each rows from first sheet
		Iterator<Row> rowIterator = sheet.iterator();
		while(rowIterator.hasNext()) {
			Row row = rowIterator.next();
			//For each row, iterate through each columns
			Iterator<Cell> cellIterator = row.cellIterator();
			while(cellIterator.hasNext()) {
				Cell cell = cellIterator.next();
				switch(cell.getCellType()) {
				case Cell.CELL_TYPE_BOOLEAN:
					System.out.print(cell.getBooleanCellValue() + "\t\t");
					break;
				case Cell.CELL_TYPE_NUMERIC:
					System.out.print(cell.getNumericCellValue() + "\t\t");
					break;
				case Cell.CELL_TYPE_STRING:
					System.out.print(cell.getStringCellValue() + "\t\t");
					break;
				   
				}
			}
			System.out.println("");
		}
		file.close();
		FileOutputStream out = new FileOutputStream(new File("H:\\Arbeit\\Universum_Abzuege\\test4.xlsx"));
			   
		workbook.write(out);
		out.close();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
hier noch die imports:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

POI 3.9 (3.10 sollte auch gehen)
 
Zuletzt bearbeitet:
Ja, der Pfad der Datei passt.
Interessant ist auch, dass ein Kollege von mir das gleiche auch mit den gleichen Libraries problemlos ausführen kann, ich aber nicht...
 
Ja, der Pfad der Datei passt.
Interessant ist auch, dass ein Kollege von mir das gleiche auch mit den gleichen Libraries problemlos ausführen kann, ich aber nicht...
Sind die poi- jar- Files im Build-Pfad vorhanden? Alle?
Diese jar- files müssen vorhanden sein:
poi-3.9-20121203.jar
poi-excelant-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
xmlbeans-2.3.0.jar
stax-api-1.0.1.jar
dom4j-1.6.1.jar

die letzten 3 sind im ooxml-lib- Verzeichnis, dass mit dem poi- zip geliefert wird.
 
Zuletzt bearbeitet:

Zurück
Oben