Accueil > > > OUVRIR UN DOCUMENT WORD PAR AUTOMATION ET FAIRE UNE FUSION AVEC DES DONNÉES FOXPRO
OUVRIR UN DOCUMENT WORD PAR AUTOMATION ET FAIRE UNE FUSION AVEC DES DONNÉES FOXPRO
Information sur la source
Description
Bonjour à tous Voila, j'ai eu besoin depuis VFP6.0 d'exporter des données et d'ouvrir un fichier doc et de faire une fusion avec des données. Le première partie n'est que la cuisine interne Ce code est optimisable bien sûr (Remerciements à Michel pour les trucs auxquels je n'avait pas pensé.) Bonne prog Eric
Source
- local oldselect
- oldselect=select()
- *!* identifiant du personnel de cote
- m.quelpers=pers2pers.identifiant
-
- *!* requêtes sql pour arriver à ce que je veux
- *!* Franchement les requêtes sql me gonflent car tu es obligé à priori de faire quatre requêtes car je n'ai pas trouvé
- *!* le moyen de faire plusieurs liens d'une table vers plusieurs tables en sql
- *!* Bref je fais ma cuisine
-
- SELECT personnes.ss_numero, personnes.telephone,;
- personnes.fax, personnes.portable, personnes.email,personnes.titre_id, personnes.datene,;
- personnes.lieu, Personnes.lieune2 , personnes.nocartsej, personnes.numsecu,;
- personnes.clesecu, Adrext.ad_1, Adrext.ad_2, Adrext.ad_cp,Personnes.chfam_id,;
- Adrext.ad_commune, personnes.identifiant, personnes.nationalite,;
- Personnes.nom1, Personnes.prenom, Personnes.nom2, Personnes.nom3,;
- Contrats1.dateentree as dateentre, Contrats1.heureshebdo as heurhbde, ;
- Contrats1.tauxhoraire as tauxhor, Contrats1.salairemensuel as salmens ,;
- Contrats1.avantagenature as avennat ,Contrats.heureshebdo*4 as horamens,;
- Contrats1.datesortprev as sortiepre, Contrats1.qualification_id as quali;
- FROM impocom!personnes LEFT OUTER JOIN adressage!adrext ;
- ON personnes.adrext_id = Adrext.identifiant ;
- where personnes.identifiant==quelpers;
- INTO cursor ctstravsaisonduredetermineprev
-
- select ctstravsaisonduredetermineprev.*, Titre.abrégé as genre;
- from ctstravsaisonduredetermineprev left outer join impocom!titre;
- on ctstravsaisonduredetermineprev.titre_id = titre.identifiant;
- into cursor ctstravsaisonduredetermineprevtitre
-
- SELECT ctstravsaisonduredetermineprevtitre.*, Noms.nom as cnom1 ;
- FROM ctstravsaisonduredetermineprevtitre LEFT OUTER JOIN impocom!noms ;
- ON ctstravsaisonduredetermineprevtitre.nom1 = Noms.identifiant;
- into cursor Ctstravsaisonduredetermineprev1
-
- SELECT Ctstravsaisonduredetermineprev1.*, Noms.nom as cnom2 ;
- FROM Ctstravsaisonduredetermineprev1 LEFT OUTER JOIN impocom!noms ;
- ON Ctstravsaisonduredetermineprev1.nom2 = Noms.identifiant ;
- into cursor Ctstravsaisonduredetermineprev2
-
-
- SELECT Ctstravsaisonduredetermineprev2.*, Noms.nom as cnom3 ;
- FROM Ctstravsaisonduredetermineprev2 LEFT OUTER JOIN impocom!noms ;
- ON Ctstravsaisonduredetermineprev2.nom3 = Noms.identifiant ;
- into cursor Ctstravsaisonduredetermineprev3
-
-
- SELECT Ctstravsaisonduredetermineprev3.*, Noms.nom as prenom ;
- FROM Ctstravsaisonduredetermineprev3 LEFT OUTER JOIN impocom!noms ;
- ON Ctstravsaisonduredetermineprev3.nom3 = Noms.identifiant ;
- into cursor Ctstravsaisonduredetermine
-
-
-
-
- SELECT Ctstravsaisonduredetermine.*, Chfam.libelle as situfami;
- FROM ctstravsaisonduredetermine LEFT OUTER JOIN impocom!chfam ;
- ON Ctstravsaisonduredetermine.chfam_id = Chfam.identifiant ;
- into cursor ctstravsaisonduredetermine0
-
- SELECT Ctstravsaisonduredetermine0.*, qualification.libelle as qualif;
- FROM ctstravsaisonduredetermine0 LEFT OUTER JOIN eunormia!qualification;
- ON Ctstravsaisonduredetermine0.quali = qualification.identifiant ;
- into table temp\ctstravsaisonduredetermine1.dbf
-
- *!* ici ma cuisine est faite et je change les champs date en champs texte
- *!* comme ca pas d'emmerdements avec word 2002 ( Tu as raison Merci )
-
- *!* la syntaxe mergefield [nomduchamp] \@"dd/MM/yyyy" de word2002 ne fonctionne pas toujours
-
- alter table ctstravsaisonduredetermine1 alter column dateentre c(15)
- alter table ctstravsaisonduredetermine1 alter column datene c(15)
- alter table ctstravsaisonduredetermine1 alter column sortiepre c(15)
- alter table ctstravsaisonduredetermine1 alter column tauxhor c(15)
-
- *!* bon la je me replace
- select pers2pers
- set order to identifian
- seek quelpers
- set order to nom
- thisform.refresh()
-
- *!* la je bombarde le contenu dans un fichier excel
- select ctstravsaisonduredetermine1
- COPY TO contrat.xls TYPE XL5
-
- select ctstravsaisonduredetermine1
- use
- select ctstravsaisonduredetermineprevtitre
- use
- select ctstravsaisonduredetermineprev
- use
- select Ctstravsaisonduredetermineprev1
- use
- select Ctstravsaisonduredetermineprev2
- use
- select Ctstravsaisonduredetermineprev3
- use
- select Ctstravsaisonduredetermine
- use
- select ctstravsaisonduredetermine0
- use
-
-
- select (oldselect)
-
-
- && la fonction pasdeword contient
- && parameter merreur
- && do case
- && case m. merreur=1733
- && && on ne fait rien
- &&
- && endcase
-
-
-
-
- On error pasdeWord(error()) && direction vers la méthode en cas d'erreur 1733 notamement
- oWord = Createobject("Word.Application") && pas d'erreur puisque thisform.pasdeword()
-
- && remise du gestionnaire d'erreur en cours
- ON ERROR DO gesterr WITH;
- ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), lineno()
-
-
- IF TYPE('oWord') # 'O' && la variable oword n'étant pas un objet, on sort
- em_message("Le logiciel WORD n'est pas installé sur votre"+;
- " ordinateur.",0+16)
- else
- WITH oword
- * J'ouvre mon document. Comme y pas de mot de passe, je ne met qu'un paramétre
- .documents.open(repdebase+"contratsaisonnier.doc")
- .Visible = .f. && Je cache word
- .WindowState = 1 && réduite
-
-
- with .ActiveDocument.MailMerge
- .DataSource.FirstRecord = 1 && de l'enr 1
- .DataSource.LastRecord = 1 && à l'enr 1 De toute facon Il n'y en a qu'un !
- .Destination = 0 && Içi il faut mettre 0 sous peine d'avoir la
- && fameuse ou fumeuse erreur 1429
- .SuppressBlankLines = "True" && Supprime les lignes vides
- .Execute
- oword.activeDocument.printout && Içi, j'édite deux fois. J'ai pas trouvé le nombre de copies
- oword.activeDocument.printout && .activedocument.copies= 2 ne fonctionne pas
- && Bon la je teste la présence du répertoire du personnels dans le dossier de l'appli
- && et si'il n'existe pas, je le crée
- m.toto="\eunormia\personnels\"+pers2pers.identifiant
- if !directory(toto)
- cmd='md \eunormia\personnels\'+pers2pers.identifiant
- &cmd
- endif
- && Maintenant, j'y met le nom du doc
- m.queldoc=+toto+"\"+alltrim(el_nom("pers2pers","noms"))+"contratsaisonier.doc "
- && et la j'enregistre la lettre type issue de la fusion
- && Donc non liées à un tableur excel donc pouvant servir d'archive
- oword.ActiveDocument.SaveAs(queldoc)
- && Je ferme mon document en cours, celui que je viens de sauvegarder
- oword.ActiveDocument.close()
- && Je ferme le documents source
- oword.ActiveDocument.close()
-
- && Je quitte word c'est pas plus mal de liberer les ressources
- IF TYPE('oWord') = 'O' .and. !ISNULL('oword')
- oword.quit(0)
- ENDIF
-
- EndWith
- endwith
- endif
-
-
- && je release mon objet
- RELEASE oWord
-
- select (oldselect)
- && Et voila le tour est joué.
- && Merci Michel
-
local oldselect
oldselect=select()
*!* identifiant du personnel de cote
m.quelpers=pers2pers.identifiant
*!* requêtes sql pour arriver à ce que je veux
*!* Franchement les requêtes sql me gonflent car tu es obligé à priori de faire quatre requêtes car je n'ai pas trouvé
*!* le moyen de faire plusieurs liens d'une table vers plusieurs tables en sql
*!* Bref je fais ma cuisine
SELECT personnes.ss_numero, personnes.telephone,;
personnes.fax, personnes.portable, personnes.email,personnes.titre_id, personnes.datene,;
personnes.lieu, Personnes.lieune2 , personnes.nocartsej, personnes.numsecu,;
personnes.clesecu, Adrext.ad_1, Adrext.ad_2, Adrext.ad_cp,Personnes.chfam_id,;
Adrext.ad_commune, personnes.identifiant, personnes.nationalite,;
Personnes.nom1, Personnes.prenom, Personnes.nom2, Personnes.nom3,;
Contrats1.dateentree as dateentre, Contrats1.heureshebdo as heurhbde, ;
Contrats1.tauxhoraire as tauxhor, Contrats1.salairemensuel as salmens ,;
Contrats1.avantagenature as avennat ,Contrats.heureshebdo*4 as horamens,;
Contrats1.datesortprev as sortiepre, Contrats1.qualification_id as quali;
FROM impocom!personnes LEFT OUTER JOIN adressage!adrext ;
ON personnes.adrext_id = Adrext.identifiant ;
where personnes.identifiant==quelpers;
INTO cursor ctstravsaisonduredetermineprev
select ctstravsaisonduredetermineprev.*, Titre.abrégé as genre;
from ctstravsaisonduredetermineprev left outer join impocom!titre;
on ctstravsaisonduredetermineprev.titre_id = titre.identifiant;
into cursor ctstravsaisonduredetermineprevtitre
SELECT ctstravsaisonduredetermineprevtitre.*, Noms.nom as cnom1 ;
FROM ctstravsaisonduredetermineprevtitre LEFT OUTER JOIN impocom!noms ;
ON ctstravsaisonduredetermineprevtitre.nom1 = Noms.identifiant;
into cursor Ctstravsaisonduredetermineprev1
SELECT Ctstravsaisonduredetermineprev1.*, Noms.nom as cnom2 ;
FROM Ctstravsaisonduredetermineprev1 LEFT OUTER JOIN impocom!noms ;
ON Ctstravsaisonduredetermineprev1.nom2 = Noms.identifiant ;
into cursor Ctstravsaisonduredetermineprev2
SELECT Ctstravsaisonduredetermineprev2.*, Noms.nom as cnom3 ;
FROM Ctstravsaisonduredetermineprev2 LEFT OUTER JOIN impocom!noms ;
ON Ctstravsaisonduredetermineprev2.nom3 = Noms.identifiant ;
into cursor Ctstravsaisonduredetermineprev3
SELECT Ctstravsaisonduredetermineprev3.*, Noms.nom as prenom ;
FROM Ctstravsaisonduredetermineprev3 LEFT OUTER JOIN impocom!noms ;
ON Ctstravsaisonduredetermineprev3.nom3 = Noms.identifiant ;
into cursor Ctstravsaisonduredetermine
SELECT Ctstravsaisonduredetermine.*, Chfam.libelle as situfami;
FROM ctstravsaisonduredetermine LEFT OUTER JOIN impocom!chfam ;
ON Ctstravsaisonduredetermine.chfam_id = Chfam.identifiant ;
into cursor ctstravsaisonduredetermine0
SELECT Ctstravsaisonduredetermine0.*, qualification.libelle as qualif;
FROM ctstravsaisonduredetermine0 LEFT OUTER JOIN eunormia!qualification;
ON Ctstravsaisonduredetermine0.quali = qualification.identifiant ;
into table temp\ctstravsaisonduredetermine1.dbf
*!* ici ma cuisine est faite et je change les champs date en champs texte
*!* comme ca pas d'emmerdements avec word 2002 ( Tu as raison Merci )
*!* la syntaxe mergefield [nomduchamp] \@"dd/MM/yyyy" de word2002 ne fonctionne pas toujours
alter table ctstravsaisonduredetermine1 alter column dateentre c(15)
alter table ctstravsaisonduredetermine1 alter column datene c(15)
alter table ctstravsaisonduredetermine1 alter column sortiepre c(15)
alter table ctstravsaisonduredetermine1 alter column tauxhor c(15)
*!* bon la je me replace
select pers2pers
set order to identifian
seek quelpers
set order to nom
thisform.refresh()
*!* la je bombarde le contenu dans un fichier excel
select ctstravsaisonduredetermine1
COPY TO contrat.xls TYPE XL5
select ctstravsaisonduredetermine1
use
select ctstravsaisonduredetermineprevtitre
use
select ctstravsaisonduredetermineprev
use
select Ctstravsaisonduredetermineprev1
use
select Ctstravsaisonduredetermineprev2
use
select Ctstravsaisonduredetermineprev3
use
select Ctstravsaisonduredetermine
use
select ctstravsaisonduredetermine0
use
select (oldselect)
&& la fonction pasdeword contient
&& parameter merreur
&& do case
&& case m. merreur=1733
&& && on ne fait rien
&&
&& endcase
On error pasdeWord(error()) && direction vers la méthode en cas d'erreur 1733 notamement
oWord = Createobject("Word.Application") && pas d'erreur puisque thisform.pasdeword()
&& remise du gestionnaire d'erreur en cours
ON ERROR DO gesterr WITH;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), lineno()
IF TYPE('oWord') # 'O' && la variable oword n'étant pas un objet, on sort
em_message("Le logiciel WORD n'est pas installé sur votre"+;
" ordinateur.",0+16)
else
WITH oword
* J'ouvre mon document. Comme y pas de mot de passe, je ne met qu'un paramétre
.documents.open(repdebase+"contratsaisonnier.doc")
.Visible = .f. && Je cache word
.WindowState = 1 && réduite
with .ActiveDocument.MailMerge
.DataSource.FirstRecord = 1 && de l'enr 1
.DataSource.LastRecord = 1 && à l'enr 1 De toute facon Il n'y en a qu'un !
.Destination = 0 && Içi il faut mettre 0 sous peine d'avoir la
&& fameuse ou fumeuse erreur 1429
.SuppressBlankLines = "True" && Supprime les lignes vides
.Execute
oword.activeDocument.printout && Içi, j'édite deux fois. J'ai pas trouvé le nombre de copies
oword.activeDocument.printout && .activedocument.copies= 2 ne fonctionne pas
&& Bon la je teste la présence du répertoire du personnels dans le dossier de l'appli
&& et si'il n'existe pas, je le crée
m.toto="\eunormia\personnels\"+pers2pers.identifiant
if !directory(toto)
cmd='md \eunormia\personnels\'+pers2pers.identifiant
&cmd
endif
&& Maintenant, j'y met le nom du doc
m.queldoc=+toto+"\"+alltrim(el_nom("pers2pers","noms"))+"contratsaisonier.doc "
&& et la j'enregistre la lettre type issue de la fusion
&& Donc non liées à un tableur excel donc pouvant servir d'archive
oword.ActiveDocument.SaveAs(queldoc)
&& Je ferme mon document en cours, celui que je viens de sauvegarder
oword.ActiveDocument.close()
&& Je ferme le documents source
oword.ActiveDocument.close()
&& Je quitte word c'est pas plus mal de liberer les ressources
IF TYPE('oWord') = 'O' .and. !ISNULL('oword')
oword.quit(0)
ENDIF
EndWith
endwith
endif
&& je release mon objet
RELEASE oWord
select (oldselect)
&& Et voila le tour est joué.
&& Merci Michel
Conclusion
Voila le document contratsaisonnier.doc est lié avec le fichier contrat.xls qui ne contient qu'une ligne
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
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
Ouverture document existant sous C:\ [ par zuddap ]
Bonjour je programme en FOXPRO 9 et je souhaiterais ouvrir un document existant sous c:\, j'aimerais qu'il s'ouvre en lecture/écriture, mais je m'en s
Explorateur et Foxpro : ouvrir une table en exclusif [ par mike_vk ]
Bonjour, Je cherche en gros à avoir un menu contextuel sur les dbf qui puisse me permettre de choisir de l'ouvrir en "shared" ou "exlusive". Existe-t
POUR LANCER UNE FENETRE OUVRIR [ par samgood01 ]
Bonjour;Priére de m'informer sur une commande permettant de lancer la fenetre ouvrir autres que putfile() et getdir().Merci d'avance.
lancer la fenetre ouvrir [ par samgood01 ]
Bonjour les pros,Je reviens pour poser ma question conçernant la command permettant de lancer la fenetre ouvrir autres que putfile et getdir.Merci D
Numériser un document à partir du code foxpro [ par abdourasiz ]
Bonjour ! je veux developper un logiciel GED (Gestion électronique des documents). Pouvez vous m'aider à récupérer à partir du code foxpro un document
Impression d'un état VFP en Word. [ par souad213 ]
Bonjour, Je voudrais convertir (ou imprimer) mon état VFP 9, qui s'affiche sur l'écrant,sous Word. Je vous demande est ce que cela est possible en VF
Numériser un document en vfp9 [ par serele ]
Salut à tous : Je voudrais scanner un document en cliquant sur un bouton comment procéder?
ouvrir fichier a l'aide de la fonction RUN [ par ducker88 ]
Bonjour a tous, Je souhaiterai ouvrir n'importe quel fichier à partir de mon programme ecrit en foxpro.j'ai essayé RUN c:\test.xlsCela march
Accès limité à une table. [ par pledoux ]
Bonjour,Je souhaite faire un accès limité à plusieurs table. Je vous explique :J'ai des programmeurs qui utilisent VisualFoxPro pour travailler sur le
|
Derniers Blogs
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|