# Swing Tabellendaten exportieren



## mari0 (5. Sep 2006)

Hallo, 
gibt es eine eifnache möglichkeit, eine swing tabelle als *.doc, *.txt, *.html oder was auch immer zu exportieren, so dass die Tabellenformatierung weitestegehend erhalten bleibt.

Danke


----------



## Caffè Latte (5. Sep 2006)

Hi,

ich kenne das doc-Format nicht und txt kennt keine Tabellen. Mit HTML dürfte es am einfachsten sein.Oder was möchtest du jetzt geaus wissen?


----------



## EOB (5. Sep 2006)

hi, also es gibt keine fertige klasse die das machen wuerde. ich wuerd auch sagen html. einfach zeile fuer zeile lesen und in html abspeichern. IMHO

gruesse


----------



## mari0 (5. Sep 2006)

danke, 
aber seufz... wie geht so was ?:cry:


----------



## Leroy42 (5. Sep 2006)

```
<html>
<body>
...
<table>
  <tr>
    <td>Zelle der 1. Zeile, 1.Spalte</td>...<td>Zelle der 1. Zeile, m.Spalte</td>
  </tr>
    ...
  <tr>
    <td>Zelle der n. Zeile, 1.Spalte</td>...<td>Zelle der n. Zeile, m.Spalte</td>
  </tr>
</table>
...
</body>
</html>
```


----------



## mari0 (5. Sep 2006)

also das weiß ich ,
also mit einem servlet write objekt das irgendwie machen


----------



## Caffè Latte (5. Sep 2006)

Hi,

ein Servlet? Ich dachte du hast 'ne Swing-Anwendung. Falls dem so ist, würde ich so vorgehen:

- Anzahl der Spalten und Zeilen ermitteln (Methoden getColumnCount und getRowCount des JTable-Objekts)
- ein Array mit den Headern erzeugen (die "Überschriften"). Über das TableModel der Tabelle kommst du da ran (getColumnName(index)).
- ein Datei-Objekt erzeugen und einen PrintWriter darauf
- Über den PrintWriter das HTML-Gerüst erzeugen
- In der ersten Schleife die Header schreiben (aus dem oben genannten Array)
- dann zwei verschachtelte for-Schleifen und zeilenweise die Spalten schreiben (_myTable_.getValueAt(zeile, spalte).toString())
- den HTML-Abschluss schreiben
- PrintWriter und File schliessen
- testen und debuggen

Hoffe es hilft ...


----------



## mari0 (5. Sep 2006)

hmm nicht schlecht. vielen dank. mal gucken ob ich das zusammenschustern kann


----------



## Caffè Latte (5. Sep 2006)

Hi,

ich hab das mal für eine csv-Export gemacht. Wenn du willst kannst du den Code haben, dann haste schon mal ein Gerüst ...


----------



## mari0 (5. Sep 2006)

na supi, gerne )


----------



## Caffè Latte (5. Sep 2006)

Hi,

hier mal der Quelltext:


```
/*
 * FileExport.java
 */

package exportUtils;

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.swing.JFileChooser;
import javax.swing.JTable;

/**
 * Export table tableHeaders and data to a CSV file
 * 
 */
public class CsvExport {
    
    private JTable tableResult;
    private String[] tableHeaders;
    
    /**
     * Creates a new instance of FileExport
     * 
     * @param tableHeaders[] the headers from the JTable
     * @param tableResult the JTable object.
     */
    public CsvExport(String[] tableHeaders, JTable tableResult) {
        this.tableHeaders = tableHeaders;
        this.tableResult = tableResult;
    }
    
    /**
     * Write table tableHeaders and data to a file
     * selected from a file chooser.
     * 
     * @return null if no exception is thrown, otherwise the description of the exception 
     */
    public String writeCSV() {
        try {
            JFileChooser fileSelection = new JFileChooser();
            SimpleFileFilter csvFilter = new SimpleFileFilter("csv", "Komma getrennte Werteliste");
            fileSelection.setAcceptAllFileFilterUsed(false);
            fileSelection.addChoosableFileFilter(csvFilter);
            fileSelection.showDialog(null, "Exportieren");
            try {
                String fileName = fileSelection.getSelectedFile().toString();
                
                if (!fileName.substring(fileName.length()-4).toLowerCase().equals(".csv")) {
                    fileName += ".csv";
                }
                File exportFile = new File(fileName);
                if (exportFile != null){
                    PrintWriter pw = new PrintWriter(new FileWriter(exportFile.getAbsolutePath()));
                    int rows = tableResult.getRowCount();
                    int columns = tableResult.getColumnCount();
                    for (int i = 0; i < columns; i++){
                        pw.print(tableHeaders[i]);
                        if (i < columns-1) pw.print(";");
                    }
                    pw.println();
                    for (int i = 0; i < rows; i++) {
                        for (int j = 0; j < columns; j++){
                            pw.print(tableResult.getValueAt(i, j).toString());
                            if (j < columns-1) pw.print(";");
                        }
                        pw.println();
                    }
                    pw.close();
                }
            } catch (NullPointerException ex) {
                ex.printStackTrace();
                return null;
            }
            return null;
        } catch (Exception ex) {
            ex.printStackTrace();
            return(ex.toString());
        }
    }
}
```

Um deine Tabellendaten zu exportieren musst du eine Instanz von diesem CsvExport erstellen. Dem Konstruktor überginst du die Tabellenkopfdaten als String-Array und das JTable-Objekt. Den SimpleFileFilter findest du hier im Forum, einfach mal danach suchen (wenn du den Datei-Dialog überhaupt willst).

Bei Fragen einfach noch mal melden.


----------



## mari0 (6. Sep 2006)

Vielen lieben Dank, hat mir sehr geholfen.
Hier kommt der Code nochmal zurück, wenn jemand sowas mal braucht.

```
public class CsvExport {
   
    private JTable tableResult;
    private String[] tableHeaders;
   
    /**
     * Creates a new instance of FileExport
     *
     * @param tableHeaders[] the headers from the JTable
     * @param tableResult the JTable object.
     */
    public CsvExport(String[] tableHeaders, JTable tableResult) {
        this.tableHeaders = tableHeaders;
        this.tableResult = tableResult;
    }
   
    /**
     * Write table tableHeaders and data to a file
     * selected from a file chooser.
     *
     * @return null if no exception is thrown, otherwise the description of the exception
     */
    public String writeCSV() {
        try {
            JFileChooser fileSelection = new JFileChooser();
            SimpleFileFilter csvFilter = new SimpleFileFilter("csv", "Komma getrennte Werteliste");
            fileSelection.setAcceptAllFileFilterUsed(false);
            fileSelection.addChoosableFileFilter(csvFilter);
            fileSelection.showDialog(null, "Exportieren");
            try {
                String fileName = fileSelection.getSelectedFile().toString();
               
                if (!fileName.substring(fileName.length()-4).toLowerCase().equals(".csv")) {
                    fileName += ".csv";
                }
                File exportFile = new File(fileName);
                if (exportFile != null){
                    PrintWriter pw = new PrintWriter(new FileWriter(exportFile.getAbsolutePath()));
                    
                    pw.print("<html><head><title></title></head><body><table width = '100%' border = '1'>");

                    int rows = tableResult.getRowCount();
                    int columns = tableResult.getColumnCount();
                    pw.print("<tr>");
                    for (int i = 0; i < columns; i++)
                    {
                        pw.print("<td>"+tableHeaders[i]+"</td>");
                        
                    }
                    pw.print("</tr>");
                    
                    
                    for (int i = 0; i < rows; i++)
                    {
                        pw.print("<tr>");
                        for (int j = 0; j < columns; j++)
                        {
                            pw.print("<td>"+tableResult.getValueAt(i, j).toString()+"</td>");                            
                        }
                        pw.print("</tr>");
                        
                    }
                    pw.print("</table></body></html>");
                    pw.close();
                }
            } catch (NullPointerException ex) {
                ex.printStackTrace();
                return null;
            }
            return null;
        } catch (Exception ex) {
            ex.printStackTrace();
            return(ex.toString());
        }
    }
}
```


----------

