PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Mise en forme xlsDocument
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.

Cdlt
Message 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)

//On vérifie le résultat
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 //Champ utilisé pour récupérer la largeur du texte

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 RTFM
Message modifié, 24 juillet 2025 - 12:47