PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → [WB17] Faire un export d'une requete vers Excel sans table
[WB17] Faire un export d'une requete vers Excel sans table
Débuté par Laurent, 16 fév. 2012 22:00 - 6 réponses
Posté le 16 février 2012 - 22:00
Bonjour, je cherche un moyen d'exporter le résultat d'une requete directement en Excel sans creer une table avant.
Mon souci est que j'ai une centaine de champ et la page devient trés lente donc je voudrai créer un bouton "Exporter vers excel"
merci
Membre enregistré
48 messages
Posté le 17 février 2012 - 13:44
Bonjour,

Aucune fonction WebDev ne permet cela directement.
Toutefois tu peut coder ta propre solution.

Voici un exemple vite-fait de se que tu peut faire.

Procedure RequêteVersExcel(sdMaRequete est une Source de Données,sCheminFichierExcel est une chaîne)

xlsExport est un xlsDocument
xlsAjouteFeuille(xlsExport,"Feuille 1")
xlsFeuilleEnCours(xlsExport,1)

sRubriques est une chaîne = HListeRubrique(sdMaRequete)
POUR TOUTE CHAINE sRub,nPos,nColonne DE sRubriques SEPAREE PAR RC

xlsExport[nColonne,1] = sRub

FIN

nLigne est un entier = 2
POUR TOUTE sdMaRequete
POUR TOUTE CHAINE sRub,nPos,nColonne DE sRubriques SEPAREE PAR RC

xlsExport[nColonne,nLigne] = {sdMaRequete..Nom+"."+sRub,indChamp} // Normalement pas de souci sur l'indirection mais j'ai un doute.

FIN

nLigne ++

FIN

xlsSauve(xlsExport,sCheminFichierExcel)
Posté le 20 février 2012 - 11:59
Merci beaucoup pour ta réponse, je teste ce code cet aprem.
Posté le 06 mars 2013 - 09:22
ça marche mieux avec xlsExport[nLigne,nColonne] = {marequete..Nom+"."+sRub}
c'est juste les lignes et colonnes qui étaient inversées.
sinon, super, merci pour le code
Posté le 08 février 2019 - 16:01
Bonjour LAURENT, j'ai testé ce même code, mais ça ne fonctionne pas. Comment tu as fait? Y'a des paramètres??
Membre enregistré
48 messages
Popularité : +3 (3 votes)
Posté le 08 février 2019 - 22:21
J'aimerai récupérer la ligne de titre des colonnes, même si je mets mligne=1 je n'ai rien.

Merci
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 26 février 2019 - 18:37
Bonjour KONAN, bonjour à tous,

Le code initial de Laurent fonctionne parfaitement bien a deux petits bugs près comme signalé par Samuel.
Je les remercie tous les deux (pas les bugs, mais Laurent et Samuel, bien-sûr :o).
Au passage, @Samuel : préciser le type d'indirection est plus rapide et plus propre, sauf que dans l'exemple de Laurent, il faut remplacer 'indChamp' par 'indRubrique' et bien entendu inverser les lignes et les colonnes, comme tu l'as dit.

Voici un exemple (un peu retouché, c'est vrai, mais essentiellement pour coller à ma charte de programmation et à ma propre façon de coder). Le fil conducteur du code de Laurent est cependant respecté.

Sur un fichier des plus de 200'000 lignes de ventes, voici ce que ça donne et j'atteste que ça marche nickel.

// Variables locales.

lchnCode est une chaîne
lsrcRequête est une Source dede Données
lchnExport est une chaîne
lavcExport est un xlsDocument
ltblColonnes est un tableau de chaînes
lchnColonne est une chaîne
lentLigne est un entier
lentColonne est un entier

// Extrait la consolidation de toutes les ventes par périodes, familles, types et article (chiffre d'affaires, quantités et volumes).

Sablier(Vrai)
lchnCode =
[
SELECT DISTINCT
Ventes.Période AS Période,
LEFT(Ventes.Période,4) AS Année,
RIGHT(Ventes.Période,2) AS Mois,
Ventes.Famille AS Famille,
Ventes.TypeArticle AS Type,
Ventes.Titre AS Désignation,
SUM(Ventes.MontantNetHT) AS CA,
SUM(Ventes.QuantitéNette) AS Quantité,
SUM(Ventes.QuantitéNette * Ventes.Poids) AS Volume
FROM
Ventes
GROUP BY
Ventes.Période,
LEFT(Ventes.Période,4),
RIGHT(Ventes.Période,2),
Ventes.Famille,
Ventes.TypeArticle,
Ventes.Titre
ORDER BY
Année ASC,
Mois ASC,
Famille ASC,
Type ASC,
Désignation ASC
]
SI PAS HExécuteRequêteSQL(lsrcRequête,hRequêteDéfaut,lchnCode) ALORS
Erreur(
[
ERREUR :
La tentative d'exécution de la requête SQL a échoué.
])
FinProgramme()
FIN

// Crée le document EXCEL en destination de l'export.

lchnExport = ComplèteRep(fRepExe()) + "Export.xlsx"
xlsAjouteFeuille(lavcExport,"Ventes",1)
xlsFeuilleEnCours(lavcExport,1)

// Ajoute la ligne d'entête (titre de chaque colonne)

ChaîneVersTableau(HListeRubrique(lsrcRequête),ltblColonnes)
lentLigne = 1
POUR CHAQUE lchnColonne de ltblColonnes
lentColonne++
lavcExport[lentLigne,lentColonne] = ltblColonnes[lentColonne]
FIN

// Ajoute les lignes de données.

POUR CHAQUE lsrcRequête
lentLigne++
lentColonne = 0
POUR CHAQUE lchnColonne de ltblColonnes
lentColonne++
lavcExport[lentLigne,lentColonne] = {lsrcRequête..Nom + "." + lchnColonne,indRubrique}
FIN
FIN

// Sauvegarde le document.

xlsSauve(lavcExport,lchnExport)
Sablier(Faux)

// Ouvre le document dans EXCEL pour contrôle.

LanceAppliAssociée(lchnExport)


Cordialement,
J@ck