Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

1 OpenXmlWord_CreateFile

Prototype : string OpenXmlWord_CreateFile(fichier)

Crée un nouveau fichier docx MS Word.

Paramètres :

1 fichier A ;nom du fichier à créer

Renvoie :

0 - si pas d'erreur

2 OpenXmlWord_OpenFile

Prototype : string OpenXmlWord_OpenFile(fichier)

Ouvre un fichier docx MS Word déjà éxistant

Paramètres :

1 fichier A ;nom du fichier

Renvoie :

0 - si pas d'erreur

3 OpenXmlWord_CloseFile

Prototype : int OpenXmlWord_CloseFile

Ferme le fichier docx en cours , les modification sont aussi sauvegardées

4 OpenXmlWord_CreateParagraph

Prototype : string OpenXmlWord_CreateParagraph(justif,breakdoc)

Création d’un paragraphe

Paramètres :

1 justif x = 0 ; justif 0 ou 1(à gauche) 2(centré) 3(à droite) 4(justifié)

1 breakdoc x = 0 ; 1 indique qu’il faut faire une fin de document

Renvoie :

0 - si pas d'erreur

5 OpenXmlWord_InsertText

Prototype : string OpenXmlWord_InsertText(texte)

Ajoute le texte dans le paragraphe en cours

Paramètres :

1 texte A ;texte

Renvoie :

0 - si pas d'erreur

6 OpenXmlWord_InsertFile

Prototype : int OpenXmlWord_ InsertFile(fichier, extension ,justif, breakdoc)

Changement de la taille d'une colonne (unité de mesure Excel, 10 par défaut).

Paramètres :

1 fichier A ;nom du fichier

1 extension 32 = " " ;par défaut le type de fichier est pris selon l’exention du fichier

;mais on peut définir une extension, c’est dans le cas que fichier

;contiendrais un nom de fichier temporaire, l’extension tmp n’indique

;pas le type du fichier , on peut mettre ici ‘png’ si c’est une image png

1 justif x = 0 ; justif 0 ou 1(à gauche) 2(centré) 3(à droite) 4(justifié)

1 breakdoc x = 0 ; 1 indique qu’il faut faire une fin de document

Les types de fichiers connuent sont uniquement

  • jpg ou jpeg ou png pour les images

  • Txt pour une simple suite de texte ligne à ligne

  • Rtf pour un fichier de type rtf

  • Docx pour un fichier docx MS Word

  • Htm ou html pour un fichier au format html

  • Xml pour un fichier de donnée au format xml

Renvoie :

0 - si pas d'erreur

7 OpenXmlWord_Replace

Prototype : int OpenXmlWord_Replace(cherche,remplace,ancrage)

Cherche et remplace un texte par un autre dans le fichier MS Word en cours

Paramètres :

1 cherche A ;chaîne à chercher

1 remplace A ;remplacer par

1 ancrage x = 0 ;création ou pas d’un nouveau paragraphe à la suite

;du paragraphe qui contiens la chaîne à chercher

; en mode sans ancrage , cette fonction renvoi le nombre de remplacement

; si ancrage = 0 ,cette fonction cherche et remplace toutes les occurences et renvoi le nombre de modifications faites

; si ancrage = 1 ,cette fonction renvoi 1 à chaque fois qu'elle rencontre la valeur 'cherche', il faut donc boucler tant que cette fonction renvoi 1

; à la fin , quand il n'y a plus de texte, le retour vaut 0

;ce mode permet de s'arrêter après chaque texte pour pouvoir insérer un fichier (cf OpenXmlWord_InsertFile , cela crée un paragraphe a la suite)

;ou pour créer paragraphe à la suite du texte (cf OpenXmlWord_CreateParagraph et OpenXmlWord_InsertText, cela crée un paragraphe a la suite )

; si ancrage = 2 ,alors le champ 'cherche' doit contenir le nom d'un champ de formulaire ou de publipostage

; le champ 'remplace' n'est pas utilisé, il n'y a pas de modification du contenu du champ formulaire ou de

;publipostage ce mode permet de s'arrêter apres un champ pour pouvoir insérer un fichier (cf OpenXmlWord_InsertFile, cela crée un paragraphe a la suite )

; ou pour créer paragraphe à la suite du texte (cf OpenXmlWord_CreateParagraph et OpenXmlWord_InsertText, cela crée un paragraphe a la suite )

1 cherche A ;texte a chercher ou nom du champ

1 remplace A ;texte de remplacement , en mode champ cette valeur n'est pas traitée

1 ancrage x = 0 ;type d'ancrage 0 1 ou 2

beginf

Renvoie :

voir selon le type d’ancrage

Exemple

Bloc de code
	OpenXml_Begin

...

 
	err = OpenXmlWord_OpenFile(left(fichier))

...


	if err = 0

...


		trouver = OpenXmlWord_Replace("Monsieur","Texte De Remplacement",false)

...

do

...


	do
		trouver = OpenXmlWord_Replace("suitepublipostagebody","",true)

...


	while  trouver = 1

...

 
		OpenXmlWord_InsertFile("c:\divalto\acrylique1.png")

...


			;OpenXmlWord_CreateParagraph(3,0)

...


			;OpenXmlWord_InsertText("test_remp2");

...

wend

do

...


	wend	
	do
		trouver = OpenXmlWord_Replace("suitepublipostagehautdepage","",true)

...


	while  trouver = 1

...

 
		OpenXmlWord_InsertFile("c:\divalto\hautdepage.jpg")

...


		;OpenXmlWord_CreateParagraph(3,0)

...


		;OpenXmlWord_InsertText("test_remp2");

...

wend

do

...


	wend	
	do
	trouver = OpenXmlWord_Replace("suitepublipostagebasdepage","",true)

...


	while  trouver = 1

...

 
		OpenXmlWord_InsertFile("c:\divalto\basdepage.png")

...


		;OpenXmlWord_CreateParagraph(3,0)

...


		;OpenXmlWord_InsertText("test_remp2");

...

wend


	wend	
	;do

...


	;	trouver = OpenXmlWord_Replace("suitepublipostage","",true)

...


	;while  trouver = 1

...

 
;		OpenXmlWord_InsertFile("c:\divalto\ademortf.rtf")

...


;		OpenXmlWord_InsertFile("c:\divalto\acrylique1.png")

...


;		OpenXmlWord_InsertFile("C:\divalto\amapi_modehtml.htm")

...

	
;		OpenXmlWord_InsertFile("c:\divalto\agrmservices.docx")

...


;		OpenXmlWord_CreateParagraph(3,0)

...


;		OpenXmlWord_InsertText("salut|sur|3ligne");

...


;	wend

...

	
	OpenXmlWord_CloseFile

...


endif

Exemple d’utilisation des fonctions OpenXmlWord_ dans un publipostage

procedure demopublipostage(preview)

1 preview n

beginp

surchargedebut ;avant de faire le publipostage on indique qu’on veut intervenir

;sur le fichier docx qui contiens le résultat du publipostage

;La fonction de publipostage va alors s’arrêter avant le fin du

;publipostage général afin d’intervenir sur le document final

ErreurOle = Office_Begin

if ErreurOle = 0

ErreurOle = Ouvre_DocMaitre(preview)

If ErreurOle = 0 ; Doc ouvert

Lignes_Data(1)

Lignes_Data(2)

Lignes_Data(3)

Office_MailingExecute(Champ_ListId,1,left(system.znomprog),"MessageOffice")

Office_MailingEnd ;Dans ce mode la fonction de publipostage ne fini pas

;totalement le traitement du fichier et rend la main

;pour que le programme diva puisse intervenir sur

;le document final avant de poursuivre la fin

;de la fonction de publipotage

Surchargefin ;a la fin du publipostage on met a jour le fichier et

;on redonne la main a la fonction de publipostage

;de yoffice

EndIf

Office_End

if Champ_ListId

ListDestroy(Champ_ListId)

endif

endif

endp

procedure surchargedebut

beginp

Office_MailingNoExecuteEnd ;je veux modifier le document final

endp

procedure surchargefin

1 fichier 260

1 trouver x = 0

1 err x = 0

Beginp

...

fichier = Office_MailingGetFile

if fichier <> " " ;s’il y a eu un problème durant le publipostage

;la fonction renvoi un nom de fichier à espace

OpenXml_Begin ;ouverture du module openxml

err = OpenXmlWord_OpenFile(left(fichier)) ;chargement du fichier docx

if err = 0

...

;peut donner lui à plusieurs fois le même document mais avec des champs

;différents

Do

...

;et crée un point d’encrage juste après le paragraphe qui

;contenait le mot clé $suitepublipostage$

trouver = OpenXmlWord_Replace("suitepublipostage","",1)

while trouver = 1

...

;d’encrage après le paragraphe qui contenait $suitepublipostage$

;je peut alors indiquer a openxml de remplacer ce point d’encrage

;par le contenu d’un fichier rtf, ce qui me redonne un nouveau point

;d’encrage juste après le texte rtf

OpenXmlWord_InsertFile("c:\divalto\ademortf.rtf")

...

;par le contenu d’une image, ce qui me redonne un nouveau point

;d’encrage juste après l’image

OpenXmlWord_InsertFile("c:\divalto\acrylique1.jpg")

...

;par le contenu d’un fichier html

;attention il faut un fichier html dans un langage html simple comme

;par exemple une liste d'articles

;et si il contiend des images , le code de ces images doit être DANS la page

;html, on ne peut pas avoir une image de type chemin windows

;ou un lien http : … ) ,

; ce qui me redonne un nouveau point d’encrage juste après le texte

;html

OpenXmlWord_InsertFile("C:\divalto\amapi_modehtml.htm")

...

OpenXmlWord_InsertFile("c:\divalto\agrmservices.docx")

;sinon je peux me servir de ce point d’encrage pour crée un

;paragraphe et mettre du texte dedans

OpenXmlWord_CreateParagraph(0,0)

;le caractère | est remplacé par un saut de ligne

OpenXmlWord_InsertText("salut|sur|3ligne");

wend

OpenXmlWord_CloseFile

OpenXmlWord_CloseFile

endif

endif

Office_MailingEndNext

Endp

Image Removed

Après le publipostage

image-20240709-093236.pngImage Removed

image-20240709-093255.pngImage Removed

image-20240709-093314.pngImage Removed

image-20240709-093322.pngImage Removed

image-20240709-093331.pngImage Removed

...

8 OpenXmlWord_WriteCustomDocumentPropertiesWriter

public function int OpenXmlWord_WriteCustomDocumentPropertiesWriter(prop,valeur,type)

; écriture d'une propriété custom dans un fichier docx

; renvoi 0 si pas d'erreur

1 prop A ;nom de la propriété

1 valeur A ;valeur , si c'est une date elle doit être au format AAAAMMJJ ou AAAAMMJJHHMMSS , si c'est un bouléin ce doit être 0 ou 1

1 type A ;type "Text" "Date" "Num" (num. convertie double) "Int" (num. convertie en entier) "Bool" (0 ou 1 )

1 param S

1 retour S

beginf

9 OpenXmlWord_WriteBuiltinDocumentPropertiesWriter

public function int OpenXmlWord_WriteBuiltinDocumentPropertiesWriter(prop,valeur)

; Ecrit une propriété standard dans le fichier docx

; avec prop => "Title" "Author" "Comments" "Keywords" "Subject"

1 prop A ;Propriété

1 valeur A ;Valeur

1 param S

1 retour S

beginf

err = OpenXmlWord_OpenFile(left(fic))

if err = 0

valeur = "xxxx"

OpenXmlWord_WriteCustomDocumentPropertiesWriter("DEROGNO",left(valeur),"Text")

OpenXmlWord_WriteBuiltinDocumentPropertiesWriter("Title","coucou c'est le titre")

OpenXmlWord_WriteBuiltinDocumentPropertiesWriter("Author","coucou c est moi")

OpenXmlWord_CloseFile

endif

10 OpenXmlWord_ModifyValueMaillingField

public function char OpenXmlWord_ModifyValueMaillingField(docpropertyfind,propname,propvalue)

1 docpropertyfind A ;exemple DOCPROPERTY ou MERGEFIELD

1 propname A

1 propvalue A

1 param S

1 retour S

beginf

Exemple

Bloc de code
err = OpenXmlWord_OpenFile(left(fichierorigine))

...


if err = 0

...


valeur = "demo" & time(8)

...


OpenXmlWord_WriteCustomDocumentPropertiesWriter("DEROGNO",left(valeur),"Text")

...


valeur = "demo" & time(7)

...


OpenXmlWord_WriteCustomDocumentPropertiesWriter("DEROGIDENT",left(valeur),"Text")

...


OpenXmlWord_CloseFile

...


endif

...


OpenXml_End

Image Removed

Mais attention : cela change que la propriété du document word , mais certaines propriétés peuvent être réutilisées dans le documents, ce qui n'est pas le cas de la majorité des propriétés

par exemple ici , c'est le cas ici

...

Image Added

Remarque

Attention, ce qui est modifié concerne uniquement les propriétés du FICHIER/DOCUMENT WORD, pas une éventuelle utilisation de ces propriétés à l’intérieur du document

Par exemple dans cette capture, on voit une utilisation des propriétés du document via le mot clé DOCPROPERTY

Image Added

Si vous avez des propriétés susceptibles d'être aussi dans le document alors il faut aussi ajouter la recherche et le remplacement de ces propriétés de type

...

DOCPROPERTY dans tout le document

Bloc de code
valeur = "demo" & time(8)

...


OpenXmlWord_WriteCustomDocumentPropertiesWriter("DEROGNO",left(valeur),"Text")

...


retour = OpenXmlWord_ModifyValueMaillingField("DOCPROPERTY","DEROGNO",left(valeur))

...



valeur = "demo" & time(7)

...


OpenXmlWord_WriteCustomDocumentPropertiesWriter("DEROGIDENT",left(valeur),"Text")

...


retour = OpenXmlWord_ModifyValueMaillingField("DOCPROPERTY","DEROGIDENT",left(valeur))

...

Ce qui viendra bien remplacer les mot-clés

Image Added
Sommaire
stylenone