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] Style et taille de cellule pour Excel


Sujet :

Documents Java

  1. #1
    Membre habitué Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Points : 177
    Points
    177
    Par défaut [POI] Style et taille de cellule pour Excel
    Bonjour,

    Voilà j'utilise la librairies POI pour la génération de fichier Excel mais je rencontre un problème de fond.

    Tout se passait bien jusqu'à ce que j'essaie de définir des styles et une police pour mes cellules, en effet j'aurai souhaité faire une ligne d'entête et les autres lignes de données utiliser un autre style mais à chaque fois il me met partout le dernier style que j'ai créé.

    Alors j'ai essayé de réinitialiser mes variables mais toujours pareil, et je bloque vraiment, donc si quelqu'un a déjà utilisé cette librairie et pourrait éclairer ma lanterne qui ne brille pas très fort.

    merci d'avance.

    olivier

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Points : 36
    Points
    36
    Par défaut
    J'ai déjà touché un peu à ça, mais pourrais-tu poster ton code, ainsi que les effets ou erreurs retournés ?

    PS : tiens un rouenais !

  3. #3
    Membre habitué Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Points : 177
    Points
    177
    Par défaut
    Ok pas de problème:

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    public byte[] makeReport(Vector vector) {
        // Creation d'un classeur excel
        HSSFWorkbook workbook = null;
        // Une feuille excel
       HSSFSheet sheet = null;
       // Une ligne de feuille excel
       HSSFRow row = null;
       // Une cellule
       HSSFCell cell = null;
       // Style des cellules
       HSSFCellStyle style = null;
     
       workbook = new HSSFWorkbook();
       sheet = workbook.createSheet("Resultat");
       // Le nombre de ligne
       int rowNum = 0;
       // On fixe des volets pour laisser les éléments de menu
       freezeSheet(sheet);
     
       // On écrit la première ligne indiquant des informations 
       // sur les données contenues dans la colonne
       rowNum = getHeaderRow(workbook,sheet,rowNum);
     
       row = sheet.createRow((short)2);
       // Create a cell and put a value in it.
       cell = row.createCell((short)0);
       cell.setCellValue(3);
     
       // Création du retour pour afficher la feuille calculée
       ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
     
       try {
        workbook.write(byteStream);
       } catch (IOException e) {
       }
     
       return byteStream.toByteArray();
    }
     
    public void freezeSheet(HSSFSheet sheet) {
       // suivant le RefName
       if (RefName != null && RefName.equals(COD_EDI_DFT)) {
    	sheet.createFreezePane(0,1);
       }
    }
     
    public int getHeaderRow(HSSFWorkbook wb, HSSFSheet sheet, int nbRow) {
       HSSFRow row = null;
       HSSFCell cell = null;
       HSSFCellStyle style = null;
     
       // Create a new font and alter it.
       HSSFFont font = wb.createFont();
       font.setFontHeightInPoints((short)16);
       font.setFontName(HSSFFont.FONT_ARIAL);
       font.setColor(HSSFColor.GREEN.index);
     
       row = sheet.createRow((short)nbRow);
     
       // colonne 1
       cell = row.createCell((short)0);
       style = cell.getCellStyle();
       style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
       style.setFillBackgroundColor(HSSFColor.BLUE.index);
       style.setFont(font);
       style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);
       style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
       style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
       style.setBorderRight(HSSFCellStyle.BORDER_NONE);
       cell.setCellStyle(style);
       cell.setCellValue("Identifiant fonctionnel");
     
       cell = null;
       font = null;
       style = null;
       row = null;
     
       font = wb.createFont();
       font.setFontHeightInPoints((short)16);
       font.setFontName(HSSFFont.FONT_ARIAL);
       font.setColor(HSSFColor.RED.index);
     
       row = sheet.createRow((short)nbRow);
       // colonne 2
       cell = row.createCell((short)1);
       style = cell.getCellStyle();
       style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
       style.setFillBackgroundColor(HSSFColor.AQUA.index);
       style.setFont(font);
       style.setBorderLeft(HSSFCellStyle.BORDER_NONE);
       style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
       style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
       style.setBorderRight(HSSFCellStyle.BORDER_NONE);
       cell.setCellStyle(style);
       cell.setCellValue("Nom");
     
       cell = null;
       font = null;
       style = null;
       row = null;
     
       return nbRow;
    }
    Alors il y en a beaucoup, je suis désolé mais ..., alor en fait dans tous les cas j'ecris tous en rouge partout, et il a des bordures doubles partout sauf à droite et à gauche où il y en a aucune.

    Mon problème est de vouloir maitriser cette mise en forme par cellule.

    olivier

    PS : Etudiant rouennais.

  4. #4
    Membre habitué Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Points : 177
    Points
    177
    Par défaut
    Bonjour,

    je suis désolé de me répondre mais je viens de trouver un élément de réponse par rapport à la largeur d'une colonne.

    En effet, j'ai relu la documetation de l'API POI et j'ai vu que la largeur était divisé par 256.

    alors il faut multyiplier par 256 pour avoir la largeur que l'on souhaite et c'est parfait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheet.setColumnWidth((short)0,(short)(50*256));
    Par contre je galère toujours pour les styles.

    olivier

  5. #5
    Membre habitué Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Points : 177
    Points
    177
    Par défaut
    Encore dsl car je me réponds encore à moi-même, mais je fais ça si cela intéresse quelqu'un.

    Donc j'ai réussi à maitriser ma mise en forme par cellule!!! en fait je créais un style à partir d'une cellule, et donc je ne sais trop par quel moyen mais cela implique de l'appliquer à toutes les cellules!!

    En fait il s'agit de créer des styles à partir du classeur et ensuite de prendre une cellule et lui appliquer le style du classeur voulu!!

    un peu de code pour vous montrer tout ça mais moins (avec utilisation d'un regroupement de cellule = région)

    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
    HSSFRow row = null;
    HSSFCell cell = null;
    HSSFWorkbook wb = new HSSFWorkbook();
     
    HSSFSheet = workbook.createSheet("Resultat");
    row = sheet.createRow((short)nbRow);
     
    Region reg = new Region();
    reg.setColumnFrom((short)1);
    reg.setColumnTo((short)3);
    reg.setRowFrom(nbRow);
    reg.setRowTo(nbRow);
     
    sheet.addMergedRegion(reg);
    [b]			
    HSSFCellStyle st1 = wb.createCellStyle();
    HSSFCellStyle st2 = wb.createCellStyle();[/b]
    HSSFFont f1 = wb.createFont();
    HSSFFont f2 = wb.createFont();
     
    f1.setItalic(true);
    f1.setColor((short) HSSFColor.DARK_BLUE.index);
    f1.setFontHeightInPoints((short)12);
    f1.setBoldweight(f1.BOLDWEIGHT_BOLD);
     
    f2.setColor((short) HSSFColor.GREEN.index);
    f2.setFontHeightInPoints((short)12);
    f2.setFontName(HSSFFont.FONT_ARIAL);
     
    st1.setFont(f1);
    st1.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
     
    st2.setFont(f2);
    st2.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
     
    // colonne 1
    sheet.setColumnWidth((short)0,(short)(15*256));
    cell = row.createCell((short)0);
     
    cell.setCellStyle(st1);
    cell.setCellValue("Contenu");
     
    // colonne 2
    sheet.setColumnWidth((short)1,(short)(128*256));
    // colonne 3
    sheet.setColumnWidth((short)2,(short)(128*256));
    // colonne 4
    sheet.setColumnWidth((short)3,(short)(128*256));
    // colonne region
    cell = row.createCell((short)1);
    cell.setCellStyle(st2);
    cell.setCellValue("Contenu");
    J'espère que cela ne sera pas énorme!!!

    olivier

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 127
    Points
    127
    Par défaut
    Je sais que le sujet date un peu mais merci beaucoup pour avoir posté la solution que tu a trouvé, ca ma énormément aidé!!!!!!!.

    Au cas ou, pour ajuster la largeur de la cellule automatiquement (en fonction de son contenu) il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheet.autoSizeColumn(numCol, true);
    J'ai essayé de faire sheet.autoSizeColumn(numCol) mais ca ne fonctionne pas il faut ajouter le booleen

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Bonjour tout le monde ;
    j'ai presque la meme question de relivio ,j'ai lu les reponses et aussi sa solution,mais la contrainte qui me faire face d'utiliser cette solution c'est que moi j'ai travaille avec le package jxl.
    est ce que vous pouvez m'aider et mertci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [win32com][Excel]Formatter une cellule pour les dates
    Par emmanuel_dumas dans le forum Bibliothèques tierces
    Réponses: 9
    Dernier message: 25/11/2021, 19h11
  2. POI, JExcel pour Excel 2007
    Par eric95 dans le forum Documents
    Réponses: 5
    Dernier message: 16/01/2015, 13h56
  3. Api POI, JExcel pour Excel 2007 !
    Par eric95 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 21/03/2008, 20h25
  4. [VBA] Gérer la taille des cellules lors de l'envoi de mail depuis excel
    Par Arschney dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2007, 10h58
  5. [Excel] fonction SOMME.SI avec une cellule pour critère
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/03/2006, 17h39

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