Package XLSX , mise en forme de mon tableau (couleur)[ Resolu ]

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Petillon Alain
Messages : 5
Enregistré le : 03 Juil 2018, 08:58

Package XLSX , mise en forme de mon tableau (couleur)[ Resolu ]

Messagepar Petillon Alain » 03 Juil 2018, 12:17

Bonjour,

actuellement étudiant en statistiques, j'effectue un stage dans une entreprise ou les gens ne sont pas très familiarisés avec les statitiques. Il faut donc que la sortie se fasse sur excel. j'utilise donc le package xlsx. Mais je n'arrive pas à mettre en forme les couleurs comme je le souhaite.. Je n'arrive à colorer que des lignes et des colonnes entière.

Le format de mon data frame est 2 ligne et 5 colonne.Pour ma mise en forme, je dois avoir la première ligne d'une seule couleur et la deuxième ligne composé de 3 cellule d'une couleur puis 2 cellule d'une autre couleur.

J'ai donc essayer d'utiliser les cellblocks dans l'idée d'en utiliser 3 un de la taille du tableau puis un autre de la taille de la deuxième ligne et enfin un 3 eme des deux cellules restantes.

Je commence à tourner en rond et je ne m'en sort pas donc si quelqu'un a une façon de procéder je suis preneur.

Tout marche parfaitement sauf les couleurs.

Code : Tout sélectionner

```{r}

# Créer un classeur et une feuille Excel ainsi que stockage des données
wb <- createWorkbook(type="xlsx")
sheet <- createSheet(wb, sheetName = "addDataFrame1")
donnee <- structure(list(Annee = c(2013, 2014, 2015, 2016, 2017), Nombre_de_saillies = c(15,
18, 32, 33, 25)), class = "data.frame", row.names = c(NA, -5L
))

#création du style
cs1 = CellStyle(wb) +
Font(wb, isBold=TRUE) +
Fill(backgroundColor="lavender", foregroundColor="lavender",
pattern="SOLID_FOREGROUND") +
Alignment(h="ALIGN_CENTER",v="VERTICAL_CENTER")+Border(color = "black", position = c("TOP","BOTTOM","LEFT","RIGHT"))

#tentative de colorisation
cb = CellBlock(sheet, startRow=2, startColumn=2, length(donnee), nrow(donnee),create=TRUE)
is.CellBlock(cb)
CB.setFill(cb, cs1,rowIndex = 1,colIndex = 1)

#ajout de la table
addDataFrame(donnee, sheet, col.names = FALSE, startRow=3, startColumn=2)

# Enregistrer le classeur dans un fichier
saveWorkbook(wb,"Tableau.xlsx")
```

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Package XLSX , mise en forme de mon tableau (couleur)

Messagepar Serge Rapenne » 03 Juil 2018, 12:53

Bonjour,

j'avais utilisé ça comme base qd j'ai voulu utiliser les possibilités de mise en forme dans xlsx :
http://www.sthda.com/french/wiki/xlsx-l ... logiciel-r
https://www.r-bloggers.com/writing-from ... with-xlsx/

Sans données, il n'est pas possible de faire des tests et je n'ai ni le temps ni l'envie de générer un jeu de données pour tester (cf viewtopic.php?f=1&t=3302)

Après une lecture rapide de ton code, je trouve étrange que la mise en couleur soit avant le addDataFrame

Serge

Petillon Alain
Messages : 5
Enregistré le : 03 Juil 2018, 08:58

Re: Package XLSX , mise en forme de mon tableau (couleur)

Messagepar Petillon Alain » 03 Juil 2018, 15:17

Tout d'abord, merci d'avoir répondu.

Je suis désolé pour les données je n'avais pas vu ce topic et comme je n'ai actuellement pas de données exacte je ne pouvais pas les joindre. Je vais donc éditer de suite mon premier message en y faisant apparaître les données de l'année précédente.

En ce qui concerne les couleurs, le addDataFrame ne permet de traiter que les cellstyles par colonnes ou par lignes. Or comme je l'ai dit j'ai besoin d'une mise en forme spécifique et j'essaie donc de "tricher" en superposant 3 Cellblocks différents de plus en plus petits ( je ne sais pas si c'est possible). je rajouterai ensuite le dataframe sur les cellules de couleurs.

Merci pour les liens mais je les ai déjà trouver et malheureusement j'ai l'impression la réponse ne se trouve pas dedans (je peux me tromper). Fin j'ai vu la possibilité de faire les cellules une par une mais ce n'est pas très lisible comme code. De plus Sachant que j'aurais ensuite un tableau assez long ça risque de devenir embêtant.
Je suis depuis hier la tête dans la notice du package https://cran.r-project.org/web/packages/xlsx/xlsx.pdf pour faire ce bout de code mais je bloque sur la partie couleur.

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Package XLSX , mise en forme de mon tableau (couleur)

Messagepar Serge Rapenne » 04 Juil 2018, 09:45

Bonjour,

moi je ferais comme ça :

Code : Tout sélectionner

donnee <- structure(list(Annee = c(2013, 2014, 2015, 2016, 2017),
                         Nombre_de_saillies = c(15,18, 32, 33, 25)), class = "data.frame", row.names = c(NA, -5L
                                                                                         ))
wb <- createWorkbook(type="xlsx")
sheet <- createSheet(wb, sheetName = "addDataFrame1")
addDataFrame(donnee, sheet, col.names = FALSE)

#création des styles
cs1 = CellStyle(wb) +
  Font(wb, isBold=TRUE) +
  Fill(backgroundColor="lavender", foregroundColor="lavender",
       pattern="SOLID_FOREGROUND") +
  Alignment(h="ALIGN_CENTER",v="VERTICAL_CENTER")+Border(color = "black", position = c("TOP","BOTTOM","LEFT","RIGHT"))
cs2 = CellStyle(wb) +
  Font(wb, isBold=TRUE) +
  Fill(backgroundColor="#eb9853", foregroundColor="#eb9853",
       pattern="SOLID_FOREGROUND") +
  Alignment(h="ALIGN_CENTER",v="VERTICAL_CENTER")+Border(color = "black", position = c("TOP","BOTTOM","LEFT","RIGHT"))

rows <- getRows(sheet)
cells <- getCells(rows)
#on crée un df avec les références des lignes (X1) et des colonnes (X2) ce qui simplifie la selection des cellules
ref_cell<-data.frame(t(do.call("cbind", strsplit(names(cells),"\\."))),stringsAsFactors = F)
l_ind<-which(ref_cell$X1 ==1) #recherche les cellules de la ligne 1
lapply(l_ind, function(i) setCellStyle(cells[[i]], cs1)) #on applique le style cs1 sur les cellules de la ligne 1

l_ind<-which(ref_cell$X1  %in% 2:3) #recherche des cellules des ligne 2 et 3
lapply(l_ind, function(i) setCellStyle(cells[[i]], cs2)) #on applique le style cs2 sur les cellules des ligne 2 et 3

saveWorkbook(wb,"monfichier.xlsx")

Il est possible de jouer sur les cellules sélectionnées dans le which pour limiter la portée du style. par ex pour affecter un style aux colonnes 2 et 3 de la ligne 1, il faudrait faire l_ind<-which(ref_cell$X1==1 & ref_cell$X2 %in% 2:3 )
Serge

Petillon Alain
Messages : 5
Enregistré le : 03 Juil 2018, 08:58

Re: Package XLSX , mise en forme de mon tableau (couleur)

Messagepar Petillon Alain » 04 Juil 2018, 15:13

Merci beaucoup. Le code est clair,reproductible et facilement modifiable c'est parfait !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité