|
| Mise en forme xlsDocument |
| Débuté par Mathieu, 23 juil. 2025 17:22 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 7 messages |
|
| Posté le 23 juillet 2025 - 17:22 |
Bonjour, j'ai un code qui génère un fichier excel depuis le type de variable xlsDocument et j'aimerais bien faire un peu de mise en forme. J'aimerais, notamment, autofit les lignes et colonnes de mon fichier (il ne contient qu'une seul feuille) mais je n'ai rien trouver sur la doc le permettant, mise à part en utilisant le type OLE, mais je ne PEUX pas utiliser ce type. Donc pouvez-vous me dire si c'est possible d'autofit une feuille excel en utilisant le type xlsDocument ?
Merci d'avance, Bien à vous |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 317 messages |
|
| Posté le 23 juillet 2025 - 18:50 |
Bonjour, En décortiquant la variable de type xlsDocument, on voit qu'elle a entre autre une propriéte colonne qui est un tableau de xlsColonne variable qui a elle même une propriété largeur (et une propriété cellule). Malheureusement, on ne peut pas directement adapter la largeur de la colonne. Une solution (non testée) correspondrait au pseudo code suivant :
POUR CHAQUE Cellule DE la colonne Récupérer la largeur max de la cellule //Utiliser TexteLargeur Centrer la cellule //On ne peut pas faire de centrage au niveau de la colonne FINPOUR Colonne.Largeur:=LargeurMax //Il faudra certainement ajouter quelque pixels pour que le résultat soit plus beau
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
| Posté le 24 juillet 2025 - 11:57 |
Merci, j'ai essayé de mettre la solution en place, seulement est-il possible de récupérer la largeur du texte contenu dans une cellule ? Car vous m'indiquez d'utiliser TexteLargeur, qui quand je regarde la doc, j'ai l'impression ne sait mesurer que le texte « dans » un champ WinDev, ce qui n'est pas mon cas étant donnée que c'est des cellules excel que je veux mesurer. Peut-être que j'ai du mal avec la doc, mais c'est ce que je comprend.
Bien à vous, |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 010 messages |
|
| Posté le 24 juillet 2025 - 12:09 |
Bonjour, avez-vous essayé avec le champ tableur, il a l'avantage de ne pas nécessiter la présence de Excel sur le poste. Je sais que l'autofit est possible en double cliquant sur les inter-colonnes mais je ne sais pas si c'est accessible en programmation.
Il y a avec le champ Tableur des fonctions telles que "TableurSelectPlus" avec laquelle vous pouvez sélectionner une cellule, une plage, une colonne, une ligne :
https://doc.pcsoft.fr/fr-FR/?1000021493
il y a ensuite la fonction "TableurStyleSélection" qui permet d'appliquer des centrages (et autres) sur la plage sélectionnée donc éventuellement sur une colonne complète :
https://doc.pcsoft.fr/fr-FR/?1000021338
Eventuellement, vous pouvez travailler avec un champ tableur invisible.
Peut-être une solution à votre souhait.
Edit : ce que vous propose Voroltinquo pour un autofit est valable dans un champ Tableur.
CdltMessage modifié, 24 juillet 2025 - 12:31 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 317 messages |
|
| Posté le 24 juillet 2025 - 12:44 |
Mathieu a écrit :
Merci, j'ai essayé de mettre la solution en place, seulement est-il possible de récupérer la largeur du texte contenu dans une cellule ? Car vous m'indiquez d'utiliser TexteLargeur, qui quand je regarde la doc, j'ai l'impression ne sait mesurer que le texte « dans » un champ WinDev, ce qui n'est pas mon cas étant donnée que c'est des cellules excel que je veux mesurer.
C'est en effet le cas, l'astuce consiste à créer un champ temporaire dans la fenêtre qui va appeler la fonction. Grosso modo, le code WL (testé) ressemble à ça :
oMaFeuille est un xlsDocument oMaColonne est une xlsColonne
oMaFeuille=xlsOuvre("TestAutofit.xlsx") POUR TOUT oMaColonne de oMaFeuille..Colonne oMaColonne..Largeur=Autofit(oMaColonne)+20 FIN
xlsSauve(oMaFeuille,"TestAutofit.xlsx") xlsFerme(oMaFeuille)
TableurCharge(TBLR_Test,"TestAutofit.xlsx")
FONCTION Autofit(oMacolonne est une xlsColonne) : réel oMaCellule est une xlsCellule rLargeurMax est un réel chMonChamp est Champ
chMonChamp<-ChampCrée("SAI_ValeurCellule",typTexte,105,70,204,25)
POUR TOUT oMaCellule de oMacolonne..Cellule SI TexteLargeur(chMonChamp,oMaCellule..Valeur)> rLargeurMax ALORS rLargeurMax=TexteLargeur(chMonChamp,oMaCellule..Valeur) FIN oMaCellule..AlignementH=chCentre FIN
ChampSupprime(chMonChamp)
RENVOYER rLargeurMax
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modifié, 24 juillet 2025 - 12:47 |
| |
| |
| | | |
|
| | | | |
| | |
|