Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMPORTER FICHIER EXCEL DANS UN JTABLE


Information sur la source

Catégorie :Application Classé sous : JTable, Excel, importer Niveau : Débutant Date de création : 29/05/2008 Vu / téléchargé: 4 717 / 306

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cette permet à partir d'un fichier excel (sauf version 2007) de créer un JTable qui pourra être insérer dans un JScrollPane ou Imprimer.
Cette classe je l'ai créer car au départ je voulais pouvoir imprimer un fichier excel sans passer par
excel.

 

Source

  • import java.awt.Font;
  • import java.io.File;
  • import java.io.FileInputStream;
  • import java.io.FileNotFoundException;
  • import java.io.IOException;
  • import java.io.InputStream;
  • import java.util.logging.Level;
  • import java.util.logging.Logger;
  • import javax.swing.JFrame;
  • import javax.swing.JScrollPane;
  • import javax.swing.JTable;
  • import javax.swing.table.DefaultTableModel;
  • import org.apache.poi.hssf.usermodel.HSSFCell;
  • import org.apache.poi.hssf.usermodel.HSSFRow;
  • import org.apache.poi.hssf.usermodel.HSSFSheet;
  • import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  • import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  • /**
  • *
  • * @author Pokitos
  • * Fonctionne avec la library POI. (http://poi.apache.org/hssf/index.html);
  • * Cette classe permet d'importer un fichier excel (sauf de 2007) dans un jtable.
  • */
  • public class UtilitaireXLS {
  • public UtilitaireXLS(){
  • }
  • public static JTable CreerJTableAvecExcel(File file) throws FileNotFoundException, IOException{
  • //Créé nouvelle table
  • JTable table = new JTable();
  • //Lecture du fichier excel
  • InputStream inp = new FileInputStream(file);
  • HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
  • //Recupére page 1 du fichier xls
  • HSSFSheet sheet = wb.getSheetAt(0);
  • //compte nombre de lignes
  • int Nrow = sheet.getLastRowNum();
  • System.out.println("nr "+Nrow);
  • //compte nombre de colonnes
  • int st = NombreMaxColonne(sheet);
  • System.out.println(st);
  • //crée nouveau tableau d'objet
  • Object[][] o = new Object[Nrow][st];
  • //en tête du tableau
  • String[] titre = new String[st];
  • for(int i = 0;i<st;i++){
  • titre[i] = "#"+i;
  • }
  • //parcours la feuille et on recupère les lignes une par une
  • for(int i = 0; i<Nrow;i++){
  • HSSFRow row = sheet.getRow(i);
  • //parcours la ligne pour récupérer les colonnes
  • if(row!=null){
  • for(int j = 0;j<st;j++){
  • //Récupère la cellule puis sa valeur
  • HSSFCell cell = row.getCell((short)j);
  • Object value = ContenuCellule(cell);
  • //System.out.println(value.toString());
  • o[i][j] = value;
  • }
  • }
  • }
  • inp.close();
  • table.setModel(new DefaultTableModel(o, titre));
  • return table;
  • }
  • /**
  • * La cellule peut contenir différent type de valeur qui doivent être récupéré spécifiquement
  • */
  • private static Object ContenuCellule(HSSFCell cell){
  • Object value = null ;
  • if(cell == null){
  • value = "";
  • }
  • else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
  • value = cell.getBooleanCellValue();
  • }
  • else if(cell.getCellType() == HSSFCell.CELL_TYPE_ERROR){
  • value = cell.getErrorCellValue();
  • }
  • else if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
  • value = cell.getCellFormula();
  • }
  • else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
  • value = cell.getNumericCellValue();
  • }
  • else if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
  • value = cell.getStringCellValue();
  • }
  • return value;
  • }
  • /**
  • * Permet de récupérer le nombre maximun de colonne .
  • * Si une ligne comporte 2 cases vides à la fin , celles ci ne sont pas prises en compte.
  • * Donc pour pouvoir récupérer le nombre de colonne pour initialiser notre tableau on doit parcourir toutes les lignes
  • *
  • */
  • private static int NombreMaxColonne(HSSFSheet sheet){
  • int r = sheet.getLastRowNum();
  • int max = 0;
  • int s = 0;
  • while(s<r){
  • if(sheet.getRow(s) != null){
  • int c = sheet.getRow(s).getLastCellNum();
  • if(c>max){
  • max = c;
  • }
  • }
  • s++;
  • }
  • return max+1;
  • }
  • //exemple
  • public static void main(String args[]) {
  • java.awt.EventQueue.invokeLater(new Runnable() {
  • public void run() {
  • try {
  • //On peut utiliser JFileChooser() aussi.
  • File cible = new File("MonFichierExcel.xls");
  • JTable tableur = UtilitaireXLS.CreerJTableAvecExcel(cible);
  • tableur.setFont(new Font(Font.SERIF,Font.PLAIN,10));
  • JFrame cadre = new JFrame();
  • cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  • cadre.setVisible(true);
  • cadre.setSize(800, 200);
  • JScrollPane panel = new JScrollPane();
  • panel.setViewportView(tableur);
  • cadre.add(panel);
  • //Si vous souhaitez imprimer un jtable utlisez ceci.
  • //MessageFormat header = new MessageFormat("Page {0,number,integer}");
  • //tableur.print(JTable.PrintMode.FIT_WIDTH);
  • }catch (FileNotFoundException ex) {
  • Logger.getLogger(UtilitaireXLS.class.getName()).log(Level.SEVERE, null, ex);
  • } catch (IOException ex) {
  • Logger.getLogger(UtilitaireXLS.class.getName()).log(Level.SEVERE, null, ex);
  • }
  • }
  • });
  • }
  • }
import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 *
 * @author Pokitos
 * Fonctionne avec la library POI. (http://poi.apache.org/hssf/index.html);
 * Cette classe permet d'importer un fichier excel (sauf de 2007) dans un jtable.
 */

public class UtilitaireXLS {

        
    
    public UtilitaireXLS(){
        
    }

	
    
	
    public static JTable CreerJTableAvecExcel(File file) throws FileNotFoundException, IOException{
        //Créé nouvelle table
        JTable table = new JTable();
        
        //Lecture du fichier excel
        InputStream inp = new FileInputStream(file);
        HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
        
        //Recupére page 1 du fichier xls
        HSSFSheet sheet = wb.getSheetAt(0);
        
        //compte nombre de lignes
        int Nrow = sheet.getLastRowNum();
        System.out.println("nr "+Nrow);
        
        
        //compte nombre de colonnes
        int st = NombreMaxColonne(sheet);
        System.out.println(st);
		
        //crée nouveau tableau d'objet
        Object[][] o = new Object[Nrow][st];
		
        //en tête du tableau
        String[] titre = new String[st];
        for(int i = 0;i<st;i++){
            titre[i] = "#"+i;
        }
		
        //parcours la feuille et on recupère les lignes une par une
        for(int i = 0; i<Nrow;i++){
            HSSFRow row = sheet.getRow(i);
            
            //parcours la ligne pour récupérer les colonnes
            if(row!=null){
                for(int j = 0;j<st;j++){
					//Récupère la cellule puis sa valeur
                    HSSFCell cell = row.getCell((short)j);
                    Object value = ContenuCellule(cell);
                    //System.out.println(value.toString());
                    o[i][j] = value;
                }
            }
        }
        
        inp.close();
        table.setModel(new DefaultTableModel(o, titre));
        return table;
    }
    
    /**
	* La cellule peut contenir différent type de valeur qui doivent être récupéré spécifiquement
	*/
    private static Object ContenuCellule(HSSFCell cell){
        Object value = null ;
        
        if(cell == null){
            value = "";
        }
        
        else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
            value = cell.getBooleanCellValue();
        }
        else if(cell.getCellType() == HSSFCell.CELL_TYPE_ERROR){
            value = cell.getErrorCellValue();
        }
        else if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
            value = cell.getCellFormula();
        }
        else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
            value = cell.getNumericCellValue();
        }
        else if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
            value = cell.getStringCellValue();
        }
        return value;
                
    }
    
	/**
	* Permet de récupérer le nombre maximun de colonne .
	* Si une ligne comporte 2 cases vides à la fin , celles ci ne sont pas prises en compte.
	* Donc pour pouvoir récupérer le nombre de colonne pour initialiser notre tableau on doit parcourir toutes les lignes
	*
	*/
    private static int NombreMaxColonne(HSSFSheet sheet){
        
       int r = sheet.getLastRowNum();
        int max = 0;
        int s = 0;
       while(s<r){
           if(sheet.getRow(s) != null){
               int c = sheet.getRow(s).getLastCellNum();
               if(c>max){
                   max = c;
               }
           }
           s++;
           
       }
        return max+1;
    }
    
    
	//exemple 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
					//On peut utiliser JFileChooser() aussi.
                    File cible = new File("MonFichierExcel.xls");
                    
                    JTable tableur = UtilitaireXLS.CreerJTableAvecExcel(cible);
                    
                    
                    tableur.setFont(new Font(Font.SERIF,Font.PLAIN,10));
                    
                    JFrame cadre = new JFrame();
                    cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    cadre.setVisible(true);
                    cadre.setSize(800, 200);
                    JScrollPane panel = new JScrollPane();
                    panel.setViewportView(tableur);
                    cadre.add(panel);
                    
					
					//Si vous souhaitez imprimer un jtable utlisez ceci.
                    //MessageFormat header = new MessageFormat("Page {0,number,integer}");
                    //tableur.print(JTable.PrintMode.FIT_WIDTH);               

                    
                    
                }catch (FileNotFoundException ex) {
                    Logger.getLogger(UtilitaireXLS.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(UtilitaireXLS.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
    
}

Conclusion

C'est le premier code que je poste , cela fais 2 - 3 mois que je code en java donc je n'ai pas tout acquis. Je suis prêt à entendre toutes critiques.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de simoinfo le 27/07/2008 20:46:11

j'ai un problème lorsque je vx exécuter ton code dans la fonction "ContenuCellule"
dans la ligne suivant : value = cell.getBooleanCellValue();
impossible de convertir le type boolean en Objet
un proposition qui marche :
value = new Boolean(cell.getBooleanCellValue());

signaler à un administrateur
Commentaire de pokitos le 27/07/2008 22:32:58

Je prends note,
en fait entre la version 1.06.04 et 1.06.06 de java , il y a eu des modifications, et comme je n'utilise pas de boolean dans mes fichiers excel, je n'ai pas penser à tester.

Je vais modifier et remettre a jour le code.

signaler à un administrateur
Commentaire de shaft_amine le 18/10/2008 16:31:55

Salam
J'arrive pas a compiler le code a cause des import par exemple : import org.apache.poi.hssf.usermodel.HSSFCell;
SVP aide ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

transférer le contenu d une jtable en fichier excel [ par acoutarel ] Je voudrais savoir comment transférer le contenu d une jtable en fichier excel puis sans reservir pour pouvoi innitialiser une jtable merciKin'gyo Générer un graphique sous excel [ par adakick ] &nbsp;&nbsp;&nbsp;Bonjour, je voulais savoir comment on pouvais g&#233;n&#233;rer un graphique(histogramme par exemple) a partir d'une JTable.&nbsp;&n importer un classeur Excel en java [ par Talkhor ] Bonjour,J'essaie de me remettre à un projet de logiciel qui serait capable, en java donc, de lire le contenu de cellules d'un fichier excel, mais auss Exporter le contenu d'un JTable vers Excel ? [ par amine1234Z ] Salut en afit j'ai pu trouver comment Imprimer le contenu d'u Jtable, mais le probléme c'est au niveau des noms des colones, ils apparait pas bien da JTable et chekbox [ par medissamjava ] salut tout le monde,j'ai problème avec JTable, en effet je veus remplir une colonne de JTable avec des checkbox et qui je peux le sélectionner.quelqu' jcombobox et jtable [ par nasrouna84 ] salut j'ai un probleme dans frame contenant le combobox  et button et tablele probleme c que j'ai des jButton (ajouter,modifier,supprimer) et Jtablele céer un fichier excel [ par Nina2507 ] bonjour tt le monde, je travail sur une application struts, et je doit pemettre à l'utilisateur de sauvegarder des données dans un fichier excel, et d Figer des colonnes dans un JTable [ par aymdeb ] Bonjour,Dans un JTable, je souhaite figer les n premières colonnes de façon à ce qu'elles soient toujours visibles lorsque je déplace le curseur de l'


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.