|
| 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( >>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. |
| |
| |
| | | |
|
| | | | |
| | |
|