# Apache POI - HSSF vs. XSSF Problem



## AlBundy2000 (29. Mrz 2009)

Liebe Community,

mein Problem ist eigentlich recht trivial - und dennoch weiß ich nicht, wie ich es lösen kann. Folgender einfacher Code zur Veranschaulichung:


```
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;

public class ExcelTest
{
	FileOutputStream out;
	
	public ExcelTest()
	{
		// Funktioniert (Office2003):
		Workbook wb = new HSSFWorkbook();
		
		// Funktioniert nicht (Office2007):
		Workbook xb = new XSSFWorkbook();
	}

	public static void main(String[] args) 
	{
		ExcelTest excelTest = new ExcelTest();
	}
}
```

Ein HSSFWorkbook anzulegen gelingt mir ohne Probleme. Wenn ich jedoch ein XSSFWorkbook anlegen will, erhalte ich folgenden Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException

Hat jemand hierzu vielleicht eine Lösung parat? Die Libraries "poi-3.5-beta5-20090219.jar" und "poi-ooxml-3.5-beta5-20090219.jar" habe ich selbstverständlich eingebunden, wobei meines Wissens ohnedies nur die erstgenannte notwendig ist.

Vielen Dank für eure Mühe,
Al.


----------



## AlBundy2000 (29. Mrz 2009)

...funktioniert's nun... komisch.

Vielen Dank trotzallem !


----------



## SlaterB (29. Mrz 2009)

- eine nette Klassen-Such-Webseite wie
jarFinder jar and java class search
aufsuchen 

- die unbekannte Klasse korrekt eintippen:
org.apache.xmlbeans.XmlException

- sehen, welche Jars sie enthalten:
jars containing the class org.apache.xmlbeans.XmlException

- prüfen, ob eine derartige Jar schon vorhanden ist

- gegebenenfalls auf der Ursprungsseite der verwendeten Library, anscheinend poi-ooxml-3.5-beta5-20090219.jar,
nach Anleitungen, Dependencys, Installationshinweisen, Tutorials usw suchen,
notfalls eine der vorgeschlagenen Libraries auf gut Glück downloaden und einbinden

edit:
- oder nix tun und geht genauso


----------



## AlBundy2000 (29. Mrz 2009)

Ein guter Tipp, vielen Dank... so ganz astrein läuft's nämlich immer noch nicht. Und zwar nur dann nicht, wenn ich das Workbook innerhalb einer Methode erstelle, welche ich extern (aus einem anderen Objekt heraus) aufrufe...

Hat die Klasse in der das Workbook erstellt wird jedoch eine main-Methode, funktioniert's... Seltsam, seltsam... Aber so leicht gebe ich nicht auf .


----------



## AlBundy2000 (29. Mrz 2009)

Immer noch stehe ich vor dem Problem, dass ich kein XSSF-Workbook erzeugen kann, wenn ich die diesbezügliche Methode (createXSSFWorkbook()) über ein "fremdes" Objekt (in diesem Fall "ExcelTest") aufrufe bzw. diese Methode keine Methode der aufrufenden Klasse (in diesem Fall "GUI") ist.

Folgender Sourcecode veranschaulicht das Problem:


```
package exceltest;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class GUI extends JFrame
{
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) 
	{
		GUI gui 	= new GUI();
		gui		.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		gui		.setBounds(10, 10, 320, 200);
		gui		.setVisible(true);
	}
	
	public GUI()
	{
		// Kleines hässliches GUI
		
		super		("Apache POI Test");
		Container 	container	= new Container();
				container	= this.getContentPane();
				container	.setLayout(new BorderLayout());
					
		JButton	hssfButton	= new JButton("HSSF-Test");
		JButton	xssfButton	= new JButton("XSSF-Test");
		
		container.add(hssfButton, BorderLayout.WEST);
		container.add(xssfButton, BorderLayout.EAST);
		
		ActionListener actionListenerHssfButton = new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				ExcelTest excelTest = new ExcelTest();
				excelTest.createHSSFWorkbook();
			}
		};
		
		ActionListener actionListenerXssfButton = new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				ExcelTest excelTest = new ExcelTest();
				excelTest.createXSSFWorkbook();
			}
		};
		
		hssfButton.addActionListener(actionListenerHssfButton);
		xssfButton.addActionListener(actionListenerXssfButton);
	}
	
	public class ExcelTest
	{
		public ExcelTest()
		{
			
		}
		
		public void createHSSFWorkbook()
		{
			Workbook wb = new HSSFWorkbook();
		}

		public void createXSSFWorkbook()
		{
			Workbook xb = new XSSFWorkbook();
		}
	}
}
```

Könntet ihr euch das bitte einmal ansehen und mir Feedback geben? Besonderes Augenmerk ist auf die Konsolenausgabe zu richten, nachdem der Button "XSSF-Test" gedrückt wurde. 

Vielleicht hat ja schon wer von euch mit Apachi POI und XSSF gearbeitet und eine Lösung für mich !?

Vielen Dank nochmals für eure Mühe,
Al.


----------

