|
begin process at 2008 05 12 07:39:38
Derniers logiciels
|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|
|