PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Utiliser XmlMaps et TableStyle avec l'objet Automation Excel
Utiliser XmlMaps et TableStyle avec l'objet Automation Excel
Iniciado por Julien V, 16,abr. 2020 14:00 - 1 respuesta
Miembro registrado
134 mensajes
Publicado el 16,abril 2020 - 14:00
Bonjour,

je travaille actuellement sur une classe Excel custom permettant de générer des feuilles à partir :
- d'une requête sql
- d'une source de données
- d'un champ table
- d'une variable de type structure / classe / tableau



à chaque ajout de données, je définis un nom de tableau et lui affecte un style :

// Formatage du tableau avec un style tableau Excel
Excel >> Sheets( _nomFeuille ) >> Range( Excel >> Sheets( _nomFeuille ) >> Cells( 1, 1 ), Excel >> Sheets( _nomFeuille ) >> Cells( nbLignes, nbColonnes ) ) >> Select()
Excel >> Sheets( _nomFeuille ) >> ListObjects >> Add( 1, Excel >> Selection, *, 1 ) >> Name = nomTableau + TableauOccurrence( nomsFeuilles )
Excel >> Sheets( _nomFeuille ) >> ListObjects( nomTableau + TableauOccurrence( nomsFeuilles ) ) >> TableStyle = nomStyleTableau
Excel >> Sheets( _nomFeuille ) >> Columns >> autoFit()


mon souci est que pour les feuilles générées à partir requête sql / source de données / table, je connais à l'avance le nombre de lignes et de colonnes pour faire ma sélection et ensuite lui applique le nom du tableau et son style;

pour l'ajout de feuille à partir d'une variable, ce n'est pas le cas, je passe par un XmlMap qui fait tout le boulot
Sérialise( _variable, buffer, psdXMLAgrégé )
fSauveBuffer( chemin_XML, buffer )

Excel >> ActiveWorkbook >> XmlMaps >> Add( chemin_XML )>> Name = Map
Excel >> ActiveWorkbook >> XmlMaps( Map ) >> ShowImportExportValidationErrors = False
Excel >> ActiveWorkbook >> XmlMaps( Map ) >> AdjustColumnWidth = True
Excel >> ActiveWorkbook >> XmlMaps( Map ) >> PreserveColumnFilter = True
Excel >> ActiveWorkbook >> XmlMaps( Map ) >> PreserveNumberFormatting = True
Excel >> ActiveWorkbook >> XmlMaps( Map ) >> AppendOnImport = False
Excel >> ActiveWorkbook >> XmlImport( chemin_XML, objNothing, True, Excel >> Range( "$A$1" ) )

Y-a-t-il possibilité après le XmlImport de déterminer les cellules à sélectionner ?
Miembro registrado
134 mensajes
Publicado el 17,abril 2020 - 16:29
pb résolu :

- la partie xmlMap ne sert à rien ici, l'objet n'étant pas utilisé dans XmlImport
- XmlImport crée un objet mappage xml ainsi qu'un objet connexion; les deux sont à supprimer
chemin_XML = fFichierTemp( "xml_", fExtraitChemin( mChemin, fDisque + fRépertoire) ) + ".xml"
Sérialise( _variable, buffer, psdXMLAgrégé )
fSauveBuffer( chemin_XML, buffer )

Excel >> ActiveWorkbook >> XmlImport( chemin_XML, objNothing, True, Excel >> Range( "$A$1" ) )

// Suppression du mappage xml
iMax = Excel >> ActiveWorkbook >> XmlMaps >> Count()
SI iMax = 1 ALORS
Excel >> ActiveWorkbook >> XmlMaps >> Item( 1 ) >> Delete()
FIN // SI iMa

// Suppression de la connexion
iMax = Excel >> ActiveWorkbook >> Connections >> Count()
SI iMax = 1 ALORS
Excel >> ActiveWorkbook >> Connections >> Item( 1 ) >> Delete()
FIN // SI iMax = 1 ALORS


- XmlImport créé également un tableau, il suffit de le rechercher, le renommer et lui appliquer un style
// Formatage du tableau avec un style tableau Excel
iMax = Excel >> Sheets( _nomFeuille ) >> ListObjects >> Count()
SI iMax = 1 ALORS
Excel >> Sheets( _nomFeuille ) >> ListObjects >> Item( 1 ) >> Name = nomTableau + TableauOccurrence( nomsFeuilles )
Excel >> Sheets( _nomFeuille ) >> ListObjects( nomTableau + TableauOccurrence( nomsFeuilles ) ) >> TableStyle = nomStyleTableau
Excel >> Sheets( _nomFeuille ) >> ListObjects( nomTableau + TableauOccurrence( nomsFeuilles ) ) >> Range() >> Select()
FIN // SI iMax = 1 ALORS