Exporter jtable vers excel

blokisso Messages postés 2 Date d'inscription vendredi 20 avril 2012 Statut Membre Dernière intervention 25 juin 2012 - 25 juin 2012 à 13:50
kokogaston Messages postés 12 Date d'inscription mercredi 17 juillet 2013 Statut Membre Dernière intervention 9 octobre 2013 - 3 sept. 2013 à 13:18
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.

24 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juin 2012 à 14:31
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.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 juin 2012 à 14:33
0
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...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mai 2013 à 14:07
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 mai 2013 à 08:38
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
0
/* 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 ...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mai 2013 à 11:31
Tu as peut être un problème d'import.

Tu n'utilises pas d'ide ?
0
je développe sous netbeans mais je ne sais plus ce qui manque.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mai 2013 à 08:12
Tu as certainement importé la classe Label d'une autre librairie.
0
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();
        }  
}
    
}
0
Alors! Aucune aide?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
19 juin 2013 à 08:02
Tu as regardé si tu avais bien le bon import pour le Label ?

Tu ne m'as pas répondu sur ce sujet...
0
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;


...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
19 juin 2013 à 13:39
Ok pour les imports,

Comment construis tu ta JTable ? Avec un DefaultTableModel ?
0
AbstractTableModel
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 juin 2013 à 07:50
Peux tu me montrer ton code ?
0
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);
        }
    }

0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 juin 2013 à 10:00
Franchement là, je ne vois pas ce qui ne colle pas, désolé !
0
kokogaston Messages postés 12 Date d'inscription mercredi 17 juillet 2013 Statut Membre Dernière intervention 9 octobre 2013
26 août 2013 à 13:56
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.
0
Rejoignez-nous