Exporter jtable vers excel [Fermé]

Signaler
Messages postés
2
Date d'inscription
vendredi 20 avril 2012
Statut
Membre
Dernière intervention
25 juin 2012
-
Messages postés
12
Date d'inscription
mercredi 17 juillet 2013
Statut
Membre
Dernière intervention
9 octobre 2013
-
Bonjour, s'il vous plait je travail sur un projet dans lequel je dois exporter les contenus d'un jtable vers excel, mais je sais pas comment faire. Je compte sur vous pour m'aider à trouver une solution.
A voir également:

24 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Bonjour,

Pour cela, il faut que tu utilsies JExcelApi ou équivalent.

Il te suffira ensuite de parcourir ta JTable et de créer ton tableau excel case par case.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Salut Julien, J'ai fouillé un peu ca et là et voici comment j’essaie d'exporter mes données sur excel:
public class ExcelExporter {

    public ExcelExporter() {
    }
     public void exportable(JTable table, File fichier)throws Exception{
       TableModel model=table.getModel();
       FileWriter out = new FileWriter(fichier);
       BufferedWriter bw = new BufferedWriter(out);
       for(int i=0;i<model.getColumnCount();i++ ){
           bw.write(model.getColumnName(i) +"\t");
       }
       bw.write("\n");
     
     
       for(int i=0; i<model.getColumnCount();i++){
           for(int j=0;j<model.getColumnCount();j++){
               bw.write(model.getValueAt(i, j).toString()+"\t");
           }
       bw.write("\n");
       }
       bw.close();
       System.out.print("Ecrire dans"+fichier);
}
}


Mon problème est que le fichier excel reste vide; et puis je cherche a ce qu'il s'ouvre automatiquement au lieu de rester ranger dans mes Documents. S'il te plait jettes-y un coup d'oeil et reviens moi...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Tu ne peux pas exporter vers excel avec ce code, il faut que tu utilises JExcelAPI, les xls sont des fichiers binaires et non des fichiers textes.
Merci Julien !
Jai installé le JExcelAPI. Mais je ne sai plus comment le mettre a profit pour arriver a exporter. Je continue de chercher mais je te prie de me mettre sur le chemin. Sachant compter sur toi.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
J'ai fais un tutoriel avec les bases de JExcelAPI, ca devrait être suffisant pour ce que tu souhaites faire : http://www.javafr.com/codes/UTILISATION-JEXCELAPI-LIRE-FICHIER-EXCEL-AVEC-JAVA_54075.aspx
/* On créé un nouveau worbook et on l'ouvre en écriture */
workbook = Workbook.createWorkbook(new File("D:\\exemple2.xls"));
/* On créé une nouvelle feuille (test en position 0) et on l'ouvre en écriture */
WritableSheet sheet = workbook.createSheet("test", 0);
/* Creation d'un champ au format texte */
Label label = new Label(0, 0, "position A1");
sheet.addCell(label); 


s'il te plait Julien, apres la creation de la feuille de calcul, lorsque je tente de creer un champ au format text (en suivant ton exemple ci-dessus), j'ai un message d'erreur:" no suitable constructor found for Label(int, int, String)..."
Je souhaiterais donc savoir s'il y a un constructeur particulier avant d'ecrire dans les cellules? Excuse moi, mais je suis coincé depuis ...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Tu as peut être un problème d'import.

Tu n'utilises pas d'ide ?
je développe sous netbeans mais je ne sais plus ce qui manque.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Tu as certainement importé la classe Label d'une autre librairie.
Salut Julien, ci-dessous le code. Mais le fichier est créé et reste vide. Pourrais-tu, stp me dire ou se trouve l'erreur? cdl...


public class ExcelExporter {
     public void fillData(JTable table, File file) {

        try {
         
            WritableWorkbook workbook1 = Workbook.createWorkbook(file);
            WritableSheet sheet1 = workbook1.createSheet("Page 1", 0);
            
            TableModel model = table.getModel();

            for (int i = 0; i < model.getColumnCount(); i++) {
                Label column = new Label(i, 0, model.getColumnName(i));
                sheet1.addCell(column);
            }
            int j = 0;
            for (int i = 0; i < model.getRowCount(); i++) {
                for (j = 0; j < model.getColumnCount(); j++) {
            Label row = new Label(j, i+1,model.getValueAt(i,j).toString());
                    sheet1.addCell(row);
                }
            }
            workbook1.write();
            workbook1.close();


             JOptionPane.showMessageDialog(null, "Data saved at " +file+" successfully", "Message", JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception ex) {
            ex.printStackTrace();
        }  
}
    
}
Alors! Aucune aide?
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Tu as regardé si tu avais bien le bon import pour le Label ?

Tu ne m'as pas répondu sur ce sujet...
voici tous les import:
import java.io.File;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;


...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Ok pour les imports,

Comment construis tu ta JTable ? Avec un DefaultTableModel ?
AbstractTableModel
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Peux tu me montrer ton code ?
AbstractTableModel
package mesClass;

import javax.swing.table.AbstractTableModel;

public abstract class classTableau extends AbstractTableModel{
    
    Object [][] ligne;
    String [] colonne;

    public classTableau() {
    }

    public classTableau(Object[][] ligne, String[] colonne) {
        this.ligne = ligne;
        this.colonne = colonne;
    }

    @Override
    public int getRowCount() {
        return ligne.length;
    }

    @Override
    public int getColumnCount() {
        return colonne.length;
    }

    @Override
    public Object getValueAt(int i, int j) {
        return ligne [i] [j];
    }

    @Override
    public String getColumnName(int col) {
        return this.colonne[col];
    }

    public void setLigne(Object[][] ligne) {
        this.ligne = ligne;
    }

   
   
}



Remplir le tableau à partir de la BDD:

public ArrayList<Object[]> recap = new ArrayList<>();



public void raffraichir5() {//remplir le tableau récapitulatif;

        int nb = 0;
        recap.clear();

        Connexion2 cnx = new Connexion2();
        cnx.connectdb();

        if (cnx.connect != null) {

            try {
                String sql = "select * FROM change_request ";
                Statement stm = cnx.connect.createStatement();
                ResultSet rs = stm.executeQuery(sql);

                while (rs.next()) {
                    Object[] cel = new Object[17];
                    cel[0] = rs.getString(1);
                    cel[1] = rs.getString(2);
                    cel[2] = rs.getString(3);
                    cel[3] = rs.getString(4);
                    cel[4] = rs.getString(5);
                    cel[5] = rs.getString(6);
                    cel[6] = rs.getString(7);
                    cel[7] = rs.getString(8);
                    cel[8] = rs.getString(9);
                    cel[9] = rs.getString(10);
                    cel[10] = rs.getString(11);
                    cel[11] = rs.getString(12);
                    cel[12] = rs.getString(13);
                    cel[13] = rs.getString(14);
                    cel[14] = rs.getString(15);
                    cel[15] = rs.getString(16);
                    cel[16] = rs.getString(17);
  
                    recap.add(cel);
                    nb++;

                }

            } catch (Exception e) {
                JOptionPane.showConfirmDialog(this, e.getMessage());

            }
        }

        Object[][] ligne = new Object[nb][17];
        int j = 0;
        for (Object[] cel : recap) {
            ligne[j][0] = cel[0];
            ligne[j][1] = cel[1];
            ligne[j][2] = cel[2];
            ligne[j][3] = cel[3];
            ligne[j][4] = cel[4];
            ligne[j][5] = cel[5];
            ligne[j][6] = cel[6];
            ligne[j][7] = cel[7];
            ligne[j][8] = cel[8];
            ligne[j][9] = cel[9];
            ligne[j][10] = cel[10];
            ligne[j][11] = cel[11];
            ligne[j][12] = cel[12];
            ligne[j][13] = cel[13];
            ligne[j][14] = cel[14];
            ligne[j][15] = cel[15];
            ligne[j][16] = cel[16];

            j++;
        }

        String[] colonne = {"REFERENCE", "Site", "type de Travaux", "Debut planifié", "Duree", "Début_effectif", "FIN travaux", "RISK_Severity", "RISK", "Impact_Severity", "Impact", "Duree_impact", "Tâches", "Motivations", "Commentaire", "OBSERVATION", "Status"};

        tab_recap.setModel(new classTableau(ligne, colonne) {});
        this.tab_recap.repaint();

        int colIndex = 0;
        int colWidth = 100;
        TableColumn col = tab_recap.getColumnModel().getColumn(colIndex);
        col.setPreferredWidth(colWidth);

        TableColumn column = null;
        for (int i = 1; i < 15; i++) {
            column = tab_recap.getColumnModel().getColumn(i);
            column.setPreferredWidth(200);
        }
    }

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
333
Franchement là, je ne vois pas ce qui ne colle pas, désolé !
Messages postés
12
Date d'inscription
mercredi 17 juillet 2013
Statut
Membre
Dernière intervention
9 octobre 2013

Bonjour,
Le code ExportToExcell a été revu !


public class JExporter {
    public void exporter(JTable table, File file)
{
try
{
TableModel model = table.getModel();
FileWriter out = new FileWriter(file);

        for(int i=0; i < model.getColumnCount(); i++) {
    out.write(model.getColumnName(i) +"\t");  
}
out.write("\n");

    for(int i=0; i< model.getRowCount(); i++) {
        for(int j=0; j<model.getColumnCount(); j++) {
 
Object value=model.getValueAt(i,j)+"\t";
    
if ( value!=null ){
    
    out.write(value.toString()+"\t");

}
else{ out.write(" ");
     
}
out.write("\n");
   
    }
}
out.close();
    } catch(Exception err)
    {
err.printStackTrace();
    
    }
  } 
    
}


Seulement, dans le fichier excel, en dehors de la 1ere ligne (qui porte le nom des différentes colonnes, toutes les autres ligne se rangent en une seule colonne; ce qui n'est pas normal.

Prière voir le code et apporter des corrections.