begin process at 2012 05 24 09:45:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Foxpro

 > 

Archives

 > 

Débutants

 > 

exporter vers excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

exporter vers excel

mercredi 15 juin 2005 à 12:34:02 | exporter vers excel

brunaux

bonjour à tous

voila ,j'ai 3 tables ,exemple : t18,s18,r18 .dans ces 3 bases diverses variables tel que :num_coupon,desc_coupon,mont_coupon,observations etc .toutes 3 ayant un champ commun :
num_unique
est-il possible d'apres ces 3 tables de creer un fichier excel ,exemple f18 qui contiendrais 3 onglets,chacun portant le nom des 3 tables précedentes ?
au final je voudrais a partir des 3 bases (t18,s18,r18) avoir un fichier excel f18 qui aura 3 onglets (t18,s18,r18)

Est-ce quelqu'un à une re

mercredi 15 juin 2005 à 20:16:49 | Re : exporter vers excel

Mike Gagnon

Membre Club
Quelque chose du genre.


CLOSE DATABASES all

oExcel = CREATEOBJECT('Excel.application')

oWorkbook = oExcel.Workbooks.ADD

USE t18 SHARED AGAIN IN 0

SELECT T18

copydata(1,"T18")

USE r18 SHARED AGAIN IN 0

SELECT R18

copydata(2,"R18")

USE s18 SHARED AGAIN IN 0

SELECT S18

copydata(3,"S18")

PROCEDURE copydata(sheetnumero,lcSheetName)

WITH oWorkbook

.Sheets(sheetnumero).SELECT

WITH .activesheet

.NAME = lcSheetname

nfieldno=AFIELDS(arrfielda,lcAlias)

FOR N=1 TO nfieldno

.Cells(1,N).VALUE=arrfielda(N,1)

ENDFOR

nrow=2

SELECT &lcAlias

SCAN

FOR N=1 TO nfieldno

cfield=lcAlias+'.'+arrfielda(N,1)

.Cells(nrow,N).VALUE=(&cfield)

ENDFOR

.Cells(nrow,1).SELECT

nrow=nrow+1

ENDSCAN

nValue = 65

FOR N=1 TO nfieldno

cColumn = CHR(nValue)

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).EntireColumn.AutoFit

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).SELECT

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).HorizontalAlignment = xlCenter

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).VerticalAlignment = xlBottom

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).WrapText = .F.

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ORIENTATION = 0

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).AddIndent = .F.

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).IndentLevel = 0

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ShrinkToFit = .F.

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ReadingOrder = xlContext

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).MergeCells = .F.

ENDFOR

.Cells.Select

ENDWITH

ENDWITH

oExcel.VISIBLE =.T.



Mike Gagnon
jeudi 16 juin 2005 à 07:55:17 | Re : exporter vers excel

brunaux

Merci Mike pour la réponse

mais désolé cela ne marche pas
j'ai oublier de préciser quelques petites choses :j'utilise VP6 (cela a peut-etre son importance ?) et suis utilisateur occasionnel donc il y a des choses de ton code que je ne comprends pas trop !

et aussi ,outre le fait de vouloir mettre les 3 tables t18,s18 et r18 dans un fichier excel f18 ayant 3 onglets portant le nom des 3 bases,je veux creer autant de fichiers
excel qu'il y a de num_unique different dans les bases:
je m'explique:
dans t18 je vais par exemple avoir les 3 premiers enregistrement ayant 1030 en num_unique (donc egalement en s18 1030 sur x enregis. et en r18 1030 sur x enregis.),ensuite 5 enregis. ayant 1031 (idem au-dessus pour s18 et r18), puis mettons 10 enregis. ayant 1032 (idem au-dessus pour s18 et r18), etc ....
au final je vais donc avoir un fichier excel f1030(avec les onglets t18 de 3 lignes,s18 sur x lignes,r18 sur x lignes),un autre f1031(idem au-dessus),un autre f1032, etc ....

donc en fait quand je lance le programme,cela bloque tout de suite sur :

nfieldno=AFIELDS(arrfielda,lcAlias)

message "variable 'lcalias' introuvable" ?

j'ai donc besoin de nouveau d'aide !!!
merci d'avance




jeudi 16 juin 2005 à 11:08:30 | Re : exporter vers excel

Mike Gagnon

Membre Club

Les choses se compliquent. Je m'excuse je connaisait pas ton niveau de comprehension de FoxPro. Mais pour ce qui est de la première erreur que tu obtient, on peut la corriger comme ceci.
oExcel = CREATEOBJECT('Excel.application')
oWorkbook = oExcel.Workbooks.ADD
PRIVATE lcAlias
USE t18 SHARED AGAIN IN 0
SELECT T18
lcAlias = ALIAS()
copydata(1,"T18")
USE r18 SHARED AGAIN IN 0
SELECT R18
lcAlias = ALIAS()
copydata(2,"R18")
USE s18 SHARED AGAIN IN 0
SELECT S18
lcAlias = ALIAS()
copydata(3,"S18")

PROCEDURE copydata(sheetnumero,lcSheetName)

WITH oWorkbook

.Sheets(sheetnumero).SELECT

WITH .activesheet

 .NAME = lcSheetname
 nfieldno=AFIELDS(arrfielda,lcAlias)
 FOR N=1 TO nfieldno
  .Cells(1,N).VALUE=arrfielda(N,1)
 ENDFOR
 nrow=2
SELECT &lcAlias
SCAN
 FOR N=1 TO nfieldno
 cfield=lcAlias+'.'+arrfielda(N,1)
 .Cells(nrow,N).VALUE=(&cfield)
 ENDFOR
 .Cells(nrow,1).SELECT
 nrow=nrow+1
ENDSCAN
nValue = 65
FOR N=1 TO nfieldno
 cColumn = CHR(nValue)
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).EntireColumn.AutoFit
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).SELECT
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).HorizontalAlignment = xlCenter
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).VerticalAlignment = xlBottom
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).WrapText = .F.
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ORIENTATION = 0
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).AddIndent = .F.
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).IndentLevel = 0
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ShrinkToFit = .F.
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).ReadingOrder = xlContext
 .COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).MergeCells = .F.
ENDFOR
.Cells.Select
ENDWITH




Mike Gagnon

jeudi 16 juin 2005 à 12:02:24 | Re : exporter vers excel

brunaux

merci mike

petit probleme dans le programme :
message d'erreur :
variable XLCENTER introuvable
variable XLBOTTOM introuvable
variable XLCONTEXT introuvable

en appuyant tout le temps sur 'ignorer' au bout d'un moment on sors de la boucle
et on a bien un fichier excel ouvert avec les 3 onglets(t18,r18,s18) avec les donnes
donc a priori cela marche
 peut-etre faut-il supprimer les lignes pour ces 3 variables?

mais mon autre souci est que je pensais que l'on pouvait donner tout de suite dans le programme un nom de fichier excel (exemple:"premier_fichier") qui s'enregistre dans le repertoire ou on a les données
 
en fait ce que voudrais reellement c'est en lancant le programme avoir au final
mettons 4 fichier excel  : un fichier 1030.xls, puis 1031.xls,puis 1032.xls,puis 1033.xls
dans le 1030.xls j'aurais mettons 3 lignes en onglet t18,puisque dans t18 j'ai 3 lignes avec 1030 en num_unique, 3 lignes en onglet r18 puisque 3 enregis.dans r18 avec 1030 en num_unique,pareil pour l'onglet s18

puis dans le 1031.xls mettons 5 lignes (5 enregis. dans t18 avec 1031 en num_unique
etc.... comme au-dessus)

puis dans le 1032.xls mettons 10 lignes (idem comme au dessus)

etc....

est-ce-que tout cela est vraiment possible ???
j'espere ne pas etre trop brouillon dans mes explications !!

merci d'avance
jeudi 16 juin 2005 à 12:20:31 | Re : exporter vers excel

Mike Gagnon

Membre Club
Je sais ou tu veux arriver, mais je travaille la solution avec toi, en esperant que tu va pouvoir prendre le controle de la solution éventuellement. Mais pour ce qui est des constantes, j'ai oublié des définir au debut, ajoute ceci au début de la routine.

#DEFINE xlCenter -4108

#DEFINE xlBottom -4107

#DEFINE xlContext -5002

Je reviens avec le restant de la solution bientot (je dois quitter pour quelques instants). Mais techniquement la solution est faisable. Il s'agit d'utliser ddes curseurs SQL. Un qui contient les valeurs distinctes de ton num_unique, et en faisant un loop, on peut grouper le restant des données par numero unique, et une fois le curseur crée, on l'envoye à un nouvelle feuille excel.

Mike Gagnon
jeudi 16 juin 2005 à 13:58:47 | Re : exporter vers excel

brunaux

merci mike, cela marche avec les nouvelle lignes de codes pour les constantes (d'ailleurs je ne sais pas a quoi cela correspond !!!).
pour le reste je suis plutot perdu , je ne sais meme pas comment dans VFP on peut donner un nom de fichier excel lorque ce dernier est ouvert et créer en programmation
ni comment on le ferme et on l'enregistre dans un repertoire precis
j'avais vaguement penser pour le repertoire de faire un truc comme ca:
repertoire_travail = 'd:\etudes\comptages\'
CD (repertoire_travail)
mettre deja ces 2 lignes au debut du programme

je me disais aussi peut-etre decomposer en autant fichiers dbf que l'on a de num_unique different dans chacun des 3 bases
exemple pour t18
copier ds un fichier la 1ere valeur de num_unique ,ex:1030 (donc =t18_1030.dbf) avec copy to t18_1030.dbf  for num_unique=1030
balayer le fichier puis des que la valeur suivante change recommencer
copy to t18_1031.dbf for num_unique=1031
etc... etc ... pour avoir au final exemple t18_1030.dbf à t18_1080.dbf  (j'aurais aussi la meme chose pour r18 et s18 evidemment) et puis lancer ton programme en changeant manuellement les intitulés d'alias() ,plus enregistrer manuellement aussi le fichier excel ouvert (t18_1030.xls) ,fermer excel puis relancer le prg avec un nouvel intitule d'alias() ,etc etc jusqu'a t18_1080.xls , mais bon cela fait beaucoup,beaucoup de manipulations.
je compte donc beaucoup plus sur ton aide pour la suite que moi je ne pourrais d'aider en prenant le controle de la solution pour ce programme
 
j'attends donc tjrs encore ton aide   !
merci
jeudi 16 juin 2005 à 14:37:29 | Re : exporter vers excel

Mike Gagnon

Membre Club
>>>merci mike, cela marche avec les nouvelle lignes de codes pour les constantes (d'ailleurs je ne sais pas a quoi cela correspond !!!).

ILes trois valeurs en question correspondent à des contantes qu'Excel s'attend pour formatter la colone (dans l'exemple ci-haut). Tu aurrai aussi pu mettre les valeurs correspondant à la place, mais cela n'est pas un bon style de programmation. Par exemple on pourrait changer le ligne qui suit avac la valeur.

.COLUMNS(TRANSFORM(cColumn)+':'+TRANSFORM(cColumn)).HorizontalAlignment = -4108

Mais pour revenir au probleme, comme j'ai expliqué, si on prend la table T8 qui contient je crois 3 valeurs différentes. Et on utilise ce qui suit.

SELECT num_unique from T8 group by num_unique into cursor premier

La on a un curseur qui contient juste le champs num_unique, et seulement un entrée pour chaque valeurs.

Ensuite tu reprend la table T8 pour récupérer les autres champs, basé sur la valeur unique dans le curseur premier. Donc
SELECT num_unique from T8 group by num_unique into cursor premier
SELECT premier 
SCAN 
  lnNum = premier.num_unique
  SELECT * from T8 where t8.num_unique - lnNUM into moncurseur
   *** la tu envoye les données du curseur moncurseur vers un nouvelle feuille Excel avec la fonction postée plus haut

ENDSCAN

Donc pour reprendre le tout (Avec une table seulement - il faut refraire avec les autres)

#DEFINE xlCenter -4108
#DEFINE xlBottom -4107
#DEFINE xlContext -5002
oExcel = Createobject('Excel.application')
oWorkbook = oExcel.Workbooks.Add
Private lcAlias
Select num_unique From T8 Group By num_unique Into Cursor premier
Select premier
Scan
 lnNum = premier.num_unique
 Select * From T8 Where T8.num_unique - lnNum Into moncurseur
 Select moncurseur
 lcAlias= Alias()
 copydata(1,Transform(lnNum))
Endscan
Procedure copydata(sheetnumero,lcSheetName)
 With oWorkbook
  .Sheets(sheetnumero).Select
  With .activesheet
   .Name = lcSheetName
   nfieldno=Afields(arrfielda,lcAlias)
   For N=1 To nfieldno
    .Cells(1,N).Value=arrfielda(N,1)
   Endfor
   nrow=2
   Select &lcAlias
   Scan
    For N=1 To nfieldno
     cfield=lcAlias+'.'+arrfielda(N,1)
     .Cells(nrow,N).Value=(&cfield)
    Endfor
    .Cells(nrow,1).Select
    nrow=nrow+1
   Endscan
   nValue = 65
   For N=1 To nfieldno
    cColumn = Chr(nValue)
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).EntireColumn.AutoFit
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).Select
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).HorizontalAlignment = xlCenter
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).VerticalAlignment = xlBottom
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).WrapText = .F.
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).Orientation = 0
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).AddIndent = .F.
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).IndentLevel = 0
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).ShrinkToFit = .F.
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).ReadingOrder = xlContext
    .Columns(Transform(cColumn)+':'+Transform(cColumn)).MergeCells = .F.
   Endfor
   .Cells.Select
  Endwith
 Endproc




 

Mike Gagnon
lundi 20 juin 2005 à 14:41:07 | Re : exporter vers excel

brunaux

Merci Mike pour toute l'aide apportée, mais malheureusement j'toujours l'erreur une fois les données copies vers excel (avec l'aide de ton code), une fois qu'on enregistre le fichier excel ouvert quand on revient dans le formulaire ,si l'on veut de nouveau saisir des données dans les grilles qui appartiennent aux 3 tables,ca plante toujours toujours avec des messages style "les données sont déjà ouvertes dans d'autres zone de travail !"
j'ai donc laissé tomber et je fais un truc de débutant ! (on fait comme on peut !)
je copie chaque base (ex:t18_1030) avec un copy to monfichier(t18_1030) type xl5 ,la meme chose avec les 2 autres bases ,une fois les 3 copy faits ,avec un zap
je peux de nouveau resaisir des données dans mes grilles du formulaires.
Et apres pour excel quelqu'un fera une macro pour mettre les 3 fichiers excel (t18_1030, r18_1030 et s18_1030) ensemble avec les 3 onglets avec le nom des bases. c'est tiré par les chevaux mais bon ...
une derniere chose: les ligne des codes style :
.Sheets(sheetnumero).Select
.Columns(Transform(cColumn)+':'+Transform(cColumn)).IndentLevel = 0

c'est du visual foxpro ou du langage excel que l'on peut ecrire dans VFP ?

encore merci pour tout l'aide
lundi 20 juin 2005 à 14:49:46 | Re : exporter vers excel

Mike Gagnon

Membre Club
Réponse acceptée !
>>.Sheets(sheetnumero).Select
>>>.Columns(Transform(cColumn)+':'+Transform(cColumn)).IndentLevel = 0

c'est du visual foxpro ou du langage excel que l'on peut ecrire dans VFP ?

C'est du language VFP qui imite ce qu'Excel s'attend à recevoir.




Mike Gagnon


Cette discussion est classée dans : excel, tables, t18, s18, r18


Répondre à ce message

Sujets en rapport avec ce message

Consultation sur un serveur ftp de tables ou fichiers [ par shak212 ] Bonjour à tous,Voila mon problème,Je voudrais consulter un serveur ftp qui contient des tables access. Je n'ai pas de problème pour me connecter et po Export d'une requête en xls [ par crampe666 ] Salut à tous,Je cherche (et même j'arrive) à exporter les résultats d'une requête dans un fichier excel.Voici mon bout de code :   select mon_champ fr copier ver excel [ par brunaux ] Bonjour à tousComment faire lorsque l'on à un fichier de 30 0000 (ou plus) enregistrements et que l'on veut le copier en excel et avoir l'integralite export excel [ par gedizan ] Bonjour,Export ou copy to, en type XLS, me génère une première ligne contenant le nom des champs de la table exportée dans le classeur Excel.Comment p formulaire-->Excel [ par Domatreal ] Salut J'ai creer un formulaire et j'aimerais savoir si on pouvait exporter le resultat (tel qu'il apparait) dans un fichier excel. Merci bien Domatrea Fichier Excel [ par Domatreal ] Salut Est-il possible d'ouvrir un fichier excel (qui existe deja) avec foxpro, et de le modifier toujours dans foxpro?Merci d'avanceDomatreal pb d'exe ! [ par spoutnic_37 ] aloha ,       j'ai un probleme avec mon executable. En fait j'ai un formulaire qui possede les bonnes tables dans l'environnement de donnée, et dans c vfp9 les vues distantes [ par samirba ] J’ai rencontré un problème concernant les vues distantes (SQL SERVER) J’ai deux tables : - la 1ère de nom bon_entree qui contient les champs suivants  limite de left, cursor et export sous excel [ par ducker88 ] Bonjour a tous,Est ce que les fonctions left, cursor et export sont limité en caracteres. Il faut que je fasse un export d'une table qui contient un m Ouvrir fichier word, excel pdf ou autre [ par ducker88 ] Bonjour à tous, Voila je voudrais pouvoir n'importe quel fichier quel qu'en soi la syntaxe dans le logiciel par defaut, exemple je voudrais ouvrir un 


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales