IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Documents Java Discussion :

[POI] Ecrire dans Excel sans changer le format du fichier


Sujet :

Documents Java

  1. #1
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut [POI] Ecrire dans Excel sans changer le format du fichier
    Bonjour à tous,

    J'ai actuellement repris une application développée en Java qui permet d'écrire et de lire des fichiers Excel.
    La fonction de lecture ne pose pas de problème.
    Par contre la fonction d'écriture m'en pose un peu plus.
    J'ai définit un Template Excel dans lequel je dois écrire des valeurs qui viennent d'une base de données. Jusque là tout va bien. Mais lorsque j'ouvre mon fichier Excel, les valeurs sont bien présentes mais il m'a supprimé tout le format des cellules (couleurs, centrage, bordure...)

    J'aimerai que le format Excel soit gardé.

    Voici le code que j'ai utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    public static void WriteInFile(String templateFile, String destinationPath) throws SQLException, InvalidFormatException, IOException {
     
     
    		String query0 = "SELECT * FROM MATABLE";
    		PreparedStatement stmt0 = DatabaseManager.getConnection().prepareStatement(query0);
    		ResultSet rs0 = stmt0.executeQuery();
     
    		OutputStream output = null;
     
    		try {
     
    			InputStream filetemplate = new FileInputStream(new File(templateFile));
     
    			output = new FileOutputStream(destinationPath + "template.xlsx");
    			byte[] buf = new byte[1024];
    			int bytesRead;
    			while ((bytesRead = filetemplate.read(buf)) > 0) {
    				output.write(buf, 0, bytesRead);
    			}
    		} catch (FileNotFoundException e){
    			HMI.printConsole(e.toString(), 0);
    		}
     
    		finally {
    			output.close();
    		}
     
    		XSSFWorkbook wb = new XSSFWorkbook(destinationPath + "template.xlsx");
     
    		Sheet sh = wb.getSheetAt(0);
     
    		int i =10;
    		while (rs0.next()) {
     
     
    			sh.createRow(i);
     
    			Row row1 = sh.getRow(i);
    			Cell c0 = row1.createCell(0);
    			Cell c1 = row1.createCell(1);
    			Cell c2 = row1.createCell(2);
    			Cell c3 = row1.createCell(3);
    			Cell c4 = row1.createCell(4);
     
    			c0.setCellValue(rs0.getString(1));
    			c1.setCellValue(rs0.getString(2));
    			c2.setCellValue(rs0.getString(3));
    			c3.setCellValue(rs0.getString(4));
    			c4.setCellValue(rs0.getString(5));
     
    			i++;
    		}
    		// Ecriture et Fermeture du fichier cree
    		FileOutputStream out = new FileOutputStream(destinationPath + "FichierDeSortie" + ".xlsx");
    		wb.write(out);
    		out.close();
     
    	}
    Je ne vois pas à quel moment et comment lui dire de garder le format du Template

    Pour information, j'utilise Eclipse.

    Merci d'avance pour votre aide.
    Marsup

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il te faut remplacer les valeurs dans les cellules existantes, en les récupérant par row.getCell(i) (au lieu d'en créer de nouvelles par row.createCell(i)). Si tu dois créer de nouvelles cellules (pour ajouter des lignes ou des colonnes), il te faudra soit créer un style complètement, soit récupérer un style par CellStyle style = cell.getCellStyle(); sur une cell existante, pour l'affecter (avec setCellStyle()) avec la nouvelle cell.

  3. #3
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Par contre lorsque je remplace le createcCell par getCell, mon fichier Excel ne se créait plus :-(

    Est ce normal ?

    Merci
    Marsup

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par marsupilami34 Voir le message
    Est ce normal ?
    Non bien sûr. Tu as une exception ? Si la cellule n'existe pas getCell() te retournera null et ça plantera après à l'affectation de la valeur. Peut-être est-ce un souci d'index de cellule. Fais un petit test avec une itération pour afficher les cellules existantes et leur index de ligne et colonne pour vérifier si c'est cohérent avec ceux que tu utilises.

Discussions similaires

  1. Ecrire dans Excel sans MS Excel sur le poste
    Par olivv dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 13/08/2009, 11h02
  2. Ecrire dans Excel via DDE quand plusieurs fichiers Excel ouverts
    Par Lolly dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 09/07/2009, 17h26
  3. ecrire dans excel
    Par jeanlucsl dans le forum VB 6 et antérieur
    Réponses: 24
    Dernier message: 03/12/2007, 14h07
  4. [VB.NET] Ecrire dans EXCEL 2002 depuis VB.net
    Par vijeo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/06/2006, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo