PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Exportation excel
Exportation excel
Débuté par bm, 23 jan. 2006 17:19 - 5 réponses
Posté le 23 janvier 2006 - 17:19
Al'heure actuelle je fais une exportation d'un fichier windev en fichier
texte que je récupère dans excel pour le mettre au format excel.

Comment faire une importation directe dans un fichier excel ?

--
Meilleures salutations

Brigitte Moinot - Viti's
Posté le 23 janvier 2006 - 17:34
Bonjour,

Voir l'exemple pilotage d'excel.

Cordialement,

C.AUBRY
Posté le 23 janvier 2006 - 22:40
Bonjour Brigitte,

pour ma part, j'ai redéveloppé une méthode qui se sert de la classe cExcel pour faire l'export excel à partir d'une table...

Raison : l'export de la FAA exporte les colonnes dans l'ordre initial programmé et non dans l'ordre AFFICHÉ.

Tu vas avoir besoin de la classe cExcel fournie par PCSoft dans les exemples de pilotage Excel.

Tu devras adapter pour lire un fichier plutôt qu'un tableau, et donc, tu n'auras pas à mettre les colonnes en ordre...

Voici le code de la méthode :
PROCEDURE ExportExcel( pnomTable )
objExcel est un CExcel( Vrai )
objExcel:Ouvrir("",Vrai)
objExcel:Visible(Faux)

// Attendre que le document soit ouvert : (Attention : J'ai ajouté dans la classe de cExcel
// une sélection du fichier si non-renseigné en paramètre à l'ouverture... Si l'usager fais
// "" Annuler dans la fenêtre de sélection du fichier, je mets la var. bAbandon à Vrai...)
TANTQUE objExcel:m_sClasseurEnCours = "" _ET_ PAS objExcel:bAbandon
Multitâche(10)
FIN

SI objExcel:bAbandon ALORS RETOUR

Sablier(Vrai)
// Mettre les colonnes visibles en ordre :
i est un entier
nbColonnesAffichage est un entier = 0
MemCrée("ColonnesExportExcel")
POUR i = 1 A pnomTable..NombreColonne
SI {pnomTable..Nom+"."+TableEnumèreColonne(pnomTable,i),indChamp}..Visible _ET_ TableIndiceColonne(pnomTable,TableEnumèreColonne(pnomTable,i),ticAffichage) > 0 ALORS
nbColonnesAffichage++
MemAjoute( "ColonnesExportExcel", TableIndiceColonne(pnomTable,TableEnumèreColonne(pnomTable,i),ticAffichage), i )
FIN
FIN

// Exporter d'abord les entêtes de colonnes :
NoColonneExcel est un entier = 0
NoColonne est un entier
POUR NoColonne = 1 A pnomTable..NombreColonne
IndiceColonne est un entier = MemRecherche("ColonnesExportExcel",NoColonne)
SI IndiceColonne > 0 ALORS
NoColonneExcel++
objExcel:EcrireValeurCellule( 1, NoColonneExcel, pnomTable[1][IndiceColonne]..Titre)
FIN
FIN

NoLigne est un entier
// Lire le tableau dans l'ordre d'affichage des colonnes :
POUR NoLigne = 1 A pnomTable..Occurrence
menuPrincipal.msgMenu = "Export en cours..." // Affiche sur barre d'état du menu
Jauge(NoLigne,pnomTable..Occurrence,"Export en cours...",iCyanClair) // Utilise la jauge du menu
NoColonneExcel = 0
POUR NoColonne = 1 A pnomTable..NombreColonne
IndiceColonne = MemRecherche("ColonnesExportExcel",NoColonne)
SI IndiceColonne > 0 ALORS
NoColonneExcel++
SELON pnomTable[NoLigne][IndiceColonne]..Type
CAS typDate:
sDate est une Date = pnomTable[NoLigne][IndiceColonne]
sString est une chaîne = sDate="" ? "" SINON sDate[[1 A 4]]+"-"+sDate[[5 A 6]]+"-"+sDate[[7 A 8]]
objExcel:EcrireValeurCellule( NoLigne+1, NoColonneExcel, sString)
CAS typComboSNS:
sString = pnomTable[NoLigne][IndiceColonne]..ValeurAffichée
objExcel:EcrireValeurCellule( NoLigne+1, NoColonneExcel, sString)
AUTRE CAS:
objExcel:EcrireValeurCellule( NoLigne+1, NoColonneExcel, pnomTable[NoLigne][IndiceColonne])
FIN
FIN
FIN
FIN

menuPrincipal.msgMenu = ""
Jauge()
MemSupprimeTout("ColonnesExportExcel")
Sablier(Faux)

objExcel:Visible(Vrai)

-----------------------------------------------
Bon dev !
Posté le 24 janvier 2006 - 12:32
Pour Luc St-Yves :
Tu as l'air de maitriser la liaison avec Excel.

Peux-tu répondre à ma question (déjà présente sur le forum : 'Re: Utilisation de la classe CExcel avec un ActiveX 'EXCEL'' :

Je désire travailler sur un champ contenant un classeur Excel dans une fenêtre WinDEV, avec retour des évènements Excel (sélection, édition d'une cellule, clics ...). Avec la classe CExcel telle que l'exemple livré, cela ne fonctionne pas, car le classeur est contenu dans un ActiveX de type 'Internet Explorer'.

Comment faire ?
Posté le 24 janvier 2006 - 14:38
Tu crées une table vide cachée dans ta fenêtre, puis:
ConstruitTableFichier(NomTable,NomFichier,taRemplirTable)
TableVersExcel(NomTable,NomFicXls)

Tu peux modifier l'ordre des colonnes en te basant sur une requête.

Frédéric.
Posté le 25 janvier 2006 - 15:45
Salut Christophe,

malheureusement, j'avais lu ta question car j'y étais intéressé à la réponse. Je n'ai pas réussi à faire fonctionner un ACTIVEX dans une fenêtre, autre que l'explorateur Windows.

L'explorateur est intéressant pour faire ouvrir en consultation n'importe quel type de fichier supporté par le poste de travail, et celà, dans une fenêtre Windev... Je l'utilise beaucoup. Mais je ne suis pas parvenu à incorporer une fenêtre pur excel dans une fenêtre Windev et la contrôler.

En fait, j'ai même beaucoup de difficultés à trouver la liste des méthodes que l'ActiveX nous permet... Et cherche sur Microsoft n'est pas évident.

Alors le premier qui trouve Post sur le forum ;)

Bon dev !