PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Exportation Excel
Exportation Excel
Débuté par Elliot.ly, 07 jan. 2005 12:08 - 6 réponses
Posté le 07 janvier 2005 - 12:08
Bonjour,
j'aimerais savoir s'il on peut gérer nous même l'exportation excel ?
Je voudrais éditer mes propres colonnes dans le fichier excel.
Je m'explique j'ai un tableau croisé, avec des colonnes produit et des lignes clients.
Chaque colonne mère contient trois colonnes filles nommé initial, quantité et final.
Lors de l'exportation excel j'ai bien les lignes clients et les trois colonnes initial, quantité et final.

merci beaucoup
Elliot Ly
Posté le 07 janvier 2005 - 13:01
Oui par les objet OLE ('application.excel'). Par contre pas très rapide ....
@+
Philip
Posté le 07 janvier 2005 - 15:19
avec l'exemple de code ci dessous
par contre des lignes à taper
bon courage



i,NbrEnr,x sont des entiers
selectok est un booléen
NomFichierXls est une chaîne
NumFichierXls est un entier
NbLigneXls est une entier
Iter est un entier
an est une chaîne
mm est une chaîne
jj est une chaîne
clepro est un entier
nomsoc est une chaîne
NomFichierXls = fSélecteur("","","Sélection d'un fichier xls","Excel"+TAB+"*.xls","xls")

//Si la séléction est annulée, arrêt de la procédure
SI NomFichierXls = "" ALORS RETOUR

//Import du fichier
//Ouverture du fichier
NumFichierXls = xlsOuvre(NomFichierXls)
//Si le fichier ne s'ouvre pas, message d'erreur
SI NumFichierXls = -1 ALORS
Erreur("Impossible d'ouvrir le fichier "+NomFichierXls+RC+...
"trôp volumineux")
RETOUR
FIN
Sablier(Vrai)
//Nombre de lignes à importer
Iter = 0
HLitDernier(PROSPECT,PRCLEUNIK)
x=PROSPECT.PRCLEUNIK
NbLigneXls = xlsNbLignes(NumFichierXls)
//Boucle sur le nombre de ligne
POUR Iter =2 A NbLigneXls
Jauge(Iter,NbLigneXls,"Importation en cours")

SI HDoublon() ALORS Jauge(Iter,NbLigneXls,"Importation en cours")
PROSPECT.COCLEUNIK=2
PROSPECT.PRCLEUNIK=Iter+x
PROSPECT.RAISON_SOC =xlsDonnée(NumFichierXls,Iter,1,Faux)
SI xlsDonnée(NumFichierXls,Iter,2,Faux)=1 ALORS PROSPECT.CIVI1="Mr"
SI xlsDonnée(NumFichierXls,Iter,2,Faux)=2 ALORS PROSPECT.CIVI1="Mme"
SI xlsDonnée(NumFichierXls,Iter,2,Faux)=3 ALORS PROSPECT.CIVI1="Melle"
PROSPECT.RESPONSABL=xlsDonnée(NumFichierXls,Iter,3,Faux)+" "+xlsDonnée(NumFichierXls,Iter,4,Faux)
PROSPECT.TEL_FAC=xlsDonnée(NumFichierXls,Iter,5,Faux)
PROSPECT.ADRESSE =xlsDonnée(NumFichierXls,Iter,17,Faux)
PROSPECT.CODEP=xlsDonnée(NumFichierXls,Iter,11,Faux)
PROSPECT.VILLE=xlsDonnée(NumFichierXls,Iter,12,Faux)
PROSPECT.TELEPHONE =xlsDonnée(NumFichierXls,Iter,5,Faux)
PROSPECT.TELECOPIE =xlsDonnée(NumFichierXls,Iter,8,Faux)
PROSPECT.ACTIVITE =xlsDonnée(NumFichierXls,Iter,20,Faux)
PROSPECT.ADR_FAC=xlsDonnée(NumFichierXls,Iter,17,Faux)
PROSPECT.CPVFAC=xlsDonnée(NumFichierXls,Iter,11,Faux)
PROSPECT.VILLEFAC=xlsDonnée(NumFichierXls,Iter,12,Faux)
PROSPECT.TELECOPFAC=xlsDonnée(NumFichierXls,Iter,8,Faux)
PROSPECT.CREATION=xlsDonnée(NumFichierXls,Iter,14,Faux)
PROSPECT.CLIPRO=2
PROSPECT.NUM_CLIENT=""
PROSPECT.CYCLE=1
PROSPECT.DATE_CYCLE=DateSys()
PROSPECT.ORIGINE=6

PROSPECT.DECISION=""
PROSPECT.PRESCRIPT=""
PROSPECT.SIGNATAIRE=""
PROSPECT.ACTIVITE=xlsDonnée(NumFichierXls,Iter,22,Faux)
PROSPECT.NOTES=xlsDonnée(NumFichierXls,Iter,25,Faux)
PROSPECT.affaire=""
PROSPECT.mt_affaire=0
PROSPECT.FAMILLE=""
PROSPECT.STATUT=""
PROSPECT.CAPITAL=0
PROSPECT.SIRET=""
PROSPECT.APE=""
PROSPECT.ASSISTANTE=xlsDonnée(NumFichierXls,Iter,10,Faux)
PROSPECT.AD_MAIL=xlsDonnée(NumFichierXls,Iter,19,Faux)
PROSPECT.PORTABLE=xlsDonnée(NumFichierXls,Iter,9,Faux)
PROSPECT.PROCH_ACTION=xlsDonnée(NumFichierXls,Iter,15,Faux)
PROSPECT.N_DIRECT=xlsDonnée(NumFichierXls,Iter,18,Faux)
PROSPECT.SITE_INTER=xlsDonnée(NumFichierXls,Iter,21,Faux)
PROSPECT.FONC_res=xlsDonnée(NumFichierXls,Iter,18,Faux)
HAjoute("prospect")

FIN

//Fermeture du fichier xls
xlsFerme(NumFichierXls)
//Réaffichage de la table
Sablier(Faux)
Ferme
Posté le 07 janvier 2005 - 15:59
Merci Winner pour ta réponse,
cependant c'est de l'importation que tu fais, alors que j'aurais besoin d'exportation =)
après des recherches un peu plus appronfondies les solutions que j'ai répertorié sont :
-les fonctions OLE
-générer un fichier CSV
- utiliser les fonctions API

quelqu'un connait les API pour Excel leur nom et leur utilité ?
merci
Posté le 07 janvier 2005 - 17:15
Voici un petit exemple :
NomTable est une chaîne

i,j,k sont des entiers
tNumColonne est un entier

Sablier(Vrai)

xl est un objet OLE "Excel.Application"

xl>>Visible = OLEVrai // Rend Excel Visible
xl>>SheetsInNewWorkbook = 5 // On demande 5 feuilles
xl>>Workbooks>>Add() // Ajoute un nouveau classeur


// On sauvegarde la simulation

NomTable = "DETAILS"
xl>>Worksheets(1)>>Name = Gauche(SansEspace(SELSITE[SELSITE]),31)
xl>>Worksheets(1)>>Activate()

k = 1
i = 1
tNumColonne = 0
POUR j=1 A TableOccurrence(NomTable,2) // Envoyer les entêtes de colonne
SI {NomTable}[i][j]..Visible=Vrai ALORS
tNumColonne++
xl>>Range(Caract(64+tNumColonne)+"1")>>Value = {NomTable}[i][j]..Libellé
xl>>Range(Caract(64+tNumColonne)+"1")>>Font>>Bold = Vrai
xl>>Range(Caract(64+tNumColonne)+"1")>>Font>>ColorIndex = 2
xl>>Range(Caract(64+tNumColonne)+"1")>>Interior>>ColorIndex = 52
xl>>Range(Caract(64+tNumColonne)+"1")>>HorizontalAlignment = -4108
xl>>Range(Caract(64+tNumColonne)+"1")>>VerticalAlignment = -4108
FIN
Jauge(k,TableOccurrence(NomTable,2) + TableOccurrence(NomTable)); k = k + 1
FIN

tNumColonne = 0

// Envoi des informations ligne par ligne

POUR i=1 A {NomTable}..Occurrence
tNumColonne = 0
POUR j=1 A TableOccurrence(NomTable,2)
SI {NomTable}[i][j]..Visible=Vrai ALORS
tNumColonne++
xl>>Range(Caract(64+tNumColonne)+(i+1))>>Value = {NomTable}[i][j]
xl>>Range(Caract(64+tNumColonne)+(i+1))>>Borders(7)>>LineStyle = 1
xl>>Range(Caract(64+tNumColonne)+(i+1))>>Borders(8)>>LineStyle = 1
xl>>Range(Caract(64+tNumColonne)+(i+1))>>Borders(9)>>LineStyle = 1
xl>>Range(Caract(64+tNumColonne)+(i+1))>>Borders(10)>>LineStyle = 1
SI tNumColonne >= 6 ALORS
xl>>Range(Caract(64+tNumColonne)+(i+1))>>HorizontalAlignment = -4152
xl>>Range(Caract(64+tNumColonne)+(i+1))>>NumberFormat = "##0,000"
FIN
SI j = TableOccurrence(NomTable,2) -2 ALORS xl>>Range(Caract(64+tNumColonne)+(i+1))>>NumberFormat = "##0"
SI j = TableOccurrence(NomTable,2) -1 ALORS xl>>Range(Caract(64+tNumColonne)+(i+1))>>NumberFormat = "##0,00"
SI j = TableOccurrence(NomTable,2) ALORS xl>>Range(Caract(64+tNumColonne)+(i+1))>>NumberFormat = "##0,00"
FIN
Jauge(k,TableOccurrence(NomTable,2) + TableOccurrence(NomTable)); k = k + 1
FIN
FIN

POUR tNumColonne = 1 A 25
xl>>Columns(Caract(64+tNumColonne))>>EntireColumn>>AutoFit()
FIN

Jauge()
Sablier(Faux)

En deux mots après XL>> on peut employer du VB (Macros)
@+
Posté le 07 janvier 2005 - 18:29
Merci ta réponse, je la conserverais bien au chaud.
pour le moment j'ai choisi la solution des API windows, je sais que c'est pas la meilleure des choses que pour une fois la documentation Windev est un peu sucsinte, mais néanmoins j'arrive à faire des choses intéressantes.

cependant est ce que quelqu'un connaitrais l'api ou tout simplement comment faire pour changer un format de cellule.
je m'explique sous excel on peut changer le format d'une cellule, en lui demandant de renvoyer à la ligne directement, l'équivalent des retours chariots

merci
Posté le 08 janvier 2005 - 10:08
Salut,

Moi je trouve que la soluce d'utiliser du VB dans Windev est assez satisfaisante. De plus la syntaxe est facile et une fois excel ouvert, ca va assez vite. VB te permettra de faire a peut près ce que tu veux dans ta sheet excel.

Domage que WD9 n'intègre pas d'autre fonction permettant de manipuler les sheets excel de façon assez poussé...

@+
Francis.