# HSSF - JTable zu Excel exportieren



## mu (11. Mrz 2008)

Hallo

Versuche grad ein HSSF Projekt zu realisieren.

Ich will meine JTable in ein Excelfile exportieren aber kriege das nicht richtig hin.
Das erstellen eines Excelfiles funktioniert einwandfrei, ich kann auch sheets erstellen und so.

Ich poste jetzt nicht mein ganzen Source da er viel zu gross ist.

Der Teil der nicht fertig ist:

```
/**
		 * ActionListener of 'exportButton'
		 */
		exportButton.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				sheet1 = workBook.getSheetAt(0);
				
				for(rowIterator = sheet1.rowIterator(); rowIterator.hasNext();)
				{
					row = (HSSFRow)rowIterator.next();
					for(cellIterator = row.cellIterator(); cellIterator.hasNext();)
					{
						cell = (HSSFCell)cellIterator.next();
						//Export??
					}
				}
			}
			
		});
```

Kennt sich da jemand besser aus? Eine kleine anleitung wie ich vorgehen muss, was bzw. falsch ist oder was noch fehlt.

/mu


----------



## ARadauer (11. Mrz 2008)

hab sowas schon mal geschrieben.
JTable2HSSFTable, der code liegt zuhause rum, ich poste ihn dir am abend


----------



## mu (11. Mrz 2008)

danke


----------



## Gast (11. Mrz 2008)

Hallo,

ich suche auch eine Möglichkeit von Jtable nach Excel .xls doch ich benutze wie gesagt für die Darstellung einer Tabelle eine JTable und kein Workbook dieser JExel api... geht das dennoch irgendwie?


----------



## ARadauer (12. Mrz 2008)

so das ist jetzt das was ich vor einem jahr mal geschrieben hab,
vielleicht könnt ihr ja damit was anfangen....

das table model, kann man sich jederzeit vom table hohlen


```
public class TableModelWriter {
 
      /**
       * schreibt ein table modell in eine excel datei
       * 
       * @param model
       * @param target
       * @param stelle
       * @throws FileNotFoundException
       * @throws IOException
       */
      public static void writeModelToExcel(TableModel model, File target,
                  String title) throws FileNotFoundException, IOException {
            POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(target));
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet worksheets = wb.getSheetAt(0);
            
            
 
            int rows = model.getRowCount();
            int cols = model.getColumnCount();
            // titel erstellen
            HSSFRow excelRow = worksheets.getRow(0);
            if (excelRow == null) {
                  excelRow = worksheets.createRow(0);
            }
            HSSFCell excelCell = excelRow.getCell((short) 0);
            if (excelCell == null) {
                  excelCell = excelRow.createCell((short) 0);
            }
            excelCell.setCellValue(title);
            
            //überschriften erstellen
            excelRow = worksheets.getRow(1);
            if (excelRow == null) {
                  excelRow = worksheets.createRow(1);
            }
            for (int col = 0; col < cols; col++) {
                  excelCell = excelRow.getCell((short) col);
                  if (excelCell == null) {
                        excelCell = excelRow.createCell((short) col);
                  }
                  try {
                        excelCell.setCellValue(model.getColumnName(col));
                  } catch (Exception e) {
                        excelCell.setCellValue("");
                  }
            }                 
            
 
            for (int row = 0; row < rows; row++) {
                  excelRow = worksheets.getRow(row + 2);
                  if (excelRow == null) {
                        excelRow = worksheets.createRow(row + 2);
                  }
                  for (int col = 0; col < cols; col++) {
                        String sv=null;
 
                        Object o = model.getValueAt(row, col);
                        if (o instanceof CellValue) {
                             sv = ((CellValue)o).getValue();                            
                        }else if(o instanceof String){
                             sv = (String)o;
                        }else{
                            //das war für MEINEN Anwendungszweck nowtwendigt, das ist wahrscheinlich anzupassen.
                             sv = "0";
                        }
                        
                        
                        if (!sv.equalsIgnoreCase("0") && (sv.length() > 0)) {
                             excelCell = excelRow.getCell((short) col);
                             if (excelCell == null) {
                                   excelCell = excelRow.createCell((short) col);
                             }
                             try {
                                   float fv = Float.parseFloat(sv.replace(',', '.'));
                                   excelCell.setCellValue(fv);
                             } catch (Exception e) {
                                   excelCell.setCellValue(sv);
                             }
                        }
                  }
            }
            FileOutputStream fileOut = new FileOutputStream(target);
            wb.write(fileOut);
            fileOut.close();
      }
 
}
```


----------



## Gast (12. Mrz 2008)

ich komm trotzdem nicht weiter, bezüglich meiner JTable.

Hier exportierst du ja garnichts, du schreibst lediglich den wert von 'sv' aus.

/mu


----------



## mu (12. Mrz 2008)

oder nicht?


----------



## SlaterB (12. Mrz 2008)

> Hier exportierst du ja garnichts, du schreibst lediglich den wert von 'sv' aus. 

sv ist der Wert der jeweiligen Zelle, was willst du denn ansonsten exportieren?


----------



## mu (12. Mrz 2008)

eine JTable, ich bin grad ziemlich verwirrt, bzw die daten die drinn stehen


----------



## ARadauer (12. Mrz 2008)

im jtable sind keine daten drin.
im Model sind die Daten


```
JTable table = new JTable();
table.getModel();
```

zeilen und spalten sind mal wichtig


```
int rows = model.getRowCount(); 
int cols = model.getColumnCount();
```

doppelte for schleife drüber gehen


```
for (int row = 0; row < rows; row++) { 
... .....
                  for (int col = 0; col < cols; col++) {
```

und dann den wert besorgen


```
Object o = model.getValueAt(row, col);
```

usw...


----------



## mu (12. Mrz 2008)

Stimmt das so in etwa?

```
for(rowIterator = sheet.rowIterator(); rowIterator.hasNext();)
{
	HSSFRow row = (HSSFRow)rowIterator.next();
	for(cellIterator = row.cellIterator(); cellIterator.hasNext();)
	{
	            HSSFCell cell = (HSSFCell)cellIterator.next();
	            //Export JTable??
	}
}
```

Hier iterier ich einfach über jede Zelle und übergebe dann so die Werte.
Geht das so?


----------



## ARadauer (12. Mrz 2008)

nein

willst du jetzt die excel datei als jtable haben oder das jtable als excel datei?`

warum iterierst du über die excel datei? die ist doch leer. du willst doch rein schreiben, oder?

hast du dir meinen code angesehen?


----------



## mu (12. Mrz 2008)

ja hab grad falschen code gepostet fällt mir auf.


----------



## mu (13. Mrz 2008)

So, ich will das thema nochmal hochkommen lassen (*kotz*)



ich hab ja 2 For-Schleifen die über die Exceltabelle gehen (oder?????)
Es sollen die daten aus meinem tableModel rein geschrieben werden.

vorsichtshalber das jeder mein schlimmes deutsch versteht.

hier mein kompletter code
ahm, da wo steht   ->  /* WICHTIGEr TEIL */
da weiss ich nicht weiter.


```
public TableToExcel()
	{
		super("JTable to Excel");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//setLayout(new FlowLayout());
		
		/**
		 * HSSFWorkbook
		 */
		workBook = new HSSFWorkbook();
		
		/**
		 * JPanel - upper, middle & lower
		 */
		upper = new JPanel();
		add(upper, BorderLayout.NORTH);
		middle = new JPanel();
		add(middle, BorderLayout.CENTER);
		lower = new JPanel();
		add(lower, BorderLayout.SOUTH);
		
		/**
		 * Tabledata
		 */
		String[] names = {"Ana", "Izabela", "Hendrik"};
		String[][] age = {{"25", "12", "21"},{"23", "32", "53"}};
		
		/**
		 * DefaultTableModel
		 */
		dtm = new DefaultTableModel(age, names);
		
		/**
		 * JTable
		 */
		table = new JTable(dtm);
		middle.add(table);
		
		
		/**
		 * Exportbutton
		 */
		exportButton = new JButton("Export to Excel");
		lower.add(exportButton);	
		
		/**
		 * ActionListener of 'exportButton'
		 */
		exportButton.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				int rows = dtm.getRowCount();
				int cols = dtm.getColumnCount();
				
				
				/* WICHTIGER TEIL */
				HSSFRow excelRow = sheet.getRow(0); 
	            if (excelRow == null) 
	            { 
	                  excelRow = sheet.createRow(0); 
	            } 
	            
	            HSSFCell excelCell = excelRow.getCell((short) 0); 
	            if (excelCell == null) 
	            { 
	                  excelCell = excelRow.createCell((short) 0); 
	            } 

				for(int row = 0; row < rows; row++)
				{
					excelRow = sheet.getRow(row + 2); 
					if (excelRow == null) 
					{
						excelRow = sheet.createRow(row + 2);
					} 

					for(int col = 0; col < cols; col++)
					{
						Object obj = dtm.getValueAt(rows, cols);
						
					}
				}
				/* WICHTIGER TEIL ENDE */
				
				
				/**
				 * FileOutputStream
				 */
				fileOut = null;
				try 
				{
					fileOut = new FileOutputStream("WorkBook.xls");
				}
				catch (FileNotFoundException e) 
				{
					e.printStackTrace();
				}
				
				try 
				{
					workBook.write(fileOut);
				} 
				catch (IOException e) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				try 
				{
					fileOut.close();
				} 
				catch (IOException e) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
	}
```


----------

