REMPLACER UN MOT DANS UN TEXTE FORMAT .odt Topic is solved

Poser vos questions de programmation en AutoHotkey
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

07 Nov 2019, 12:59

Bonsoir,
Après bon nombre de recherches (3 mois et j'y suis presque), je ne parviens pas a trouver la solution,

L' objectif est de remplacer 4 mots dans un texte disposé un peu partout, mais attention le fichier est en .odt (libreoffice)

Les 4 mots : FOURNISSEUR / ADRESSE /CP / NUMERO par des champs que j'aurais pré-rempli.

Base : Je possede un script en DRAG AND DROP, je depose le fichier, ensuite il doit s'ouvrir, les mots doivent être remplacer,
et pour finir je dois imprimer le document.

Mon script est presque fini mais contient surement une ou plusieurs erreurs.

Exemple d'execution :
Pour l'execution avoir un fichier en .odt dont TEST.odt avec ces mots à l'interieur FOURNISSEUR / ADRESSE /CP / NUMERO.

Merci par avance!

Script :

Code: Select all

Gui:
	Gui Add, Edit, 	x80 y10  w100 h20  					vFRS2
	Gui Add, Edit, 	x80 y40	 w100 h20					vADRESSE
	Gui Add, Edit,	x80 y70 w100 h20 					vCP
	Gui Add, Edit,	x80 y100 w100 h20 					vREJET
	Gui Add, Text, x2 y0 w76 h39 +0x200, FRS
	Gui Add, Text, x2 y30 w76 h39 +0x200, ADRESSE
	Gui Add, Text, x2 y60 w76 h39 +0x200, CP
	Gui Add, Text, x2 y90 w76 h39 +0x200, REJET
	Gui Add, Button, x215 y88 w40 h20					gEFF , EFF	
	Gui Add, Edit, x2 y130 w250 h20					vcmd_name section, cmd_name
	Gui add, edit, x2 y160 w250 h20					vcmd_path, cmd_path
	Gui show
return
GuiDropFiles:
	parameter := A_GuiEvent
	gosub parse_cmd
return
parse_cmd:
	Loop , parse, parameter, `r`n
	{
	dropfile_path = %A_LoopField%
	SplitPath , dropfile_path, ,,,dropfile_name
	Break
	}
	GuiControl  ,, cmd_name, %dropfile_name%
	GuiControl  ,, cmd_path, %dropfile_path%

	Run, %dropfile_path%

Sleep,2000

Path := "%A_LoopField%"
ButtonOK:
{
	Gui, Submit, NoHide
	FileRead, Var1, %dropfile_path%
	;~ or
	;~ FileRead, Var1, %dropfile_path%
{
	StringReplace, Var1, Var1, FOURNISSEUR, %FRS2%
	StringReplace, Var1, Var1, ADRESSE, %ADRESSE%
	StringReplace, Var1, Var1, POSTAL, %CP%
	StringReplace, Var1, Var1, NUMERO, %REJET%
	;~ All of these are equivilent

	FileAppend, %Var1%`n, %dropfile_path%\TEST2.odt, UTF-8 ; The "Path" variable assigned previously
		;~ or
		;~ FileAppend, %Var1%`n, %A_Desktop%\TEST2.odt, UTF-8
		;~ or
		;~ FileAppend, %Var1%`n, C:\Users\alaudicina-cp\Desktop\TEST2.odt, UTF-8 
}
return
}

EFF:
GuiControl,, FRS2
GuiControl,, ADRESSE
GuiControl,, CP
GuiControl,, REJET
GuiControl, Choose, CODE,0
Sleep, 200
return
Last edited by joedf on 07 Nov 2019, 14:03, edited 1 time in total.
Reason: added code tags
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

07 Nov 2019, 14:04

Le script ne fonctionne pas?
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

07 Nov 2019, 17:25

Effectivement ! le problême est là il ne remplace pas les valeurs, il doit y avoir un problème dans le script qui empeche son exécution.
Il run le document et s'arrete la malheureusement!
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

08 Nov 2019, 09:17

Je ne connais pas la structure des fichiers ODT...
Peut-être qu'ils sont sous une forme binaire alors il n'est alors pas possible de tout simplement faire un remplacement de texte?
Est-ce que tu a un exemple de fichier que je peux analyser? Je n'ai pas LibreOffice d'installé en ce moment...
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

08 Nov 2019, 18:01

Je l'ai join au post, (libreoffice est un freewire) sinon j'ai fais un lien au cas où : https transfernow.net /adej4ak3ca77 Broken Link for safety

[The extension odt has been deactivated and can no longer be displayed.]


Mon script a surement une erreur car il est recomposé, statut actuel du script :

Le drag and drop : OK
L'OPEN document TEST.odt : OK
REMPLACEMENT : NON

Le code fonctionnait effecitvement sur du .txt
Pouvons nous nous mettre en relation ? Skype, Discord?
Merci par avance. :)
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

13 Nov 2019, 15:24

Bonsoir à tous !

Je n'ai toujours pas trouvé de solution la réalisation est impossible ? :sick: :sick:

Une aide ?
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

15 Nov 2019, 16:10

Désolé, jetais récemment pas mal occupe.
Mais…. Bonne nouvelle! :dance:
Après avoir analysé les fichiers, j’ai trouvé que les fichiers .ODT sont essentiellement une structure de fichiers xml contenu dans un fichier ZIP.
Alors, il faudrait utiliser quelque chose comme 7za.exe pour extraire les ficher, modifier le fichier content.xml et tout recompresser en tant que ficher ZIP et le renommer Test2.ODT

content.xml:

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<office:document-content xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink">
	<office:font-face-decls>
		<style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss" style:font-pitch="variable" svg:panose-1="2 15 5 2 2 2 4 3 2 4"/>
		<style:font-face style:name="Times New Roman" svg:font-family="Times New Roman" style:font-family-generic="roman" style:font-pitch="variable" svg:panose-1="2 2 6 3 5 4 5 2 3 4"/>
		<style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable" svg:panose-1="2 11 6 4 2 2 2 2 2 4"/>
		<style:font-face style:name="Cambria" svg:font-family="Cambria" style:font-family-generic="roman" style:font-pitch="variable" svg:panose-1="2 4 5 3 5 4 6 3 2 4"/>
	</office:font-face-decls>
	<office:automatic-styles>
		<style:style style:name="P1" style:parent-style-name="Normal" style:master-page-name="MP0" style:family="paragraph">
			<style:paragraph-properties fo:break-before="page" fo:margin-top="0.0694in" fo:margin-bottom="0in" fo:line-height="100%"/>
		</style:style>
		<style:style style:name="T2" style:parent-style-name="Policepardéfaut" style:family="text">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P3" style:parent-style-name="Normal" style:family="paragraph">
			<style:paragraph-properties fo:margin-top="0.0694in" fo:margin-bottom="0in" fo:line-height="100%"/>
			<style:text-properties style:font-name="Arial" style:font-name-asian="Times New Roman" style:font-name-complex="Arial" fo:color="#000000" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P4" style:parent-style-name="Normal" style:family="paragraph">
			<style:paragraph-properties fo:margin-top="0.0694in" fo:margin-bottom="0in" fo:line-height="100%"/>
			<style:text-properties style:font-name="Arial" style:font-name-asian="Times New Roman" style:font-name-complex="Arial" fo:color="#000000" fo:font-size="8pt" style:font-size-asian="8pt" style:font-size-complex="8pt" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P5" style:parent-style-name="Normal" style:family="paragraph">
			<style:paragraph-properties fo:margin-top="0.0694in" fo:margin-bottom="0in" fo:line-height="100%" fo:margin-left="4.9166in">
				<style:tab-stops/>
			</style:paragraph-properties>
		</style:style>
		<style:style style:name="T6" style:parent-style-name="Policepardéfaut" style:family="text">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P7" style:parent-style-name="Normal" style:family="paragraph">
			<style:paragraph-properties fo:margin-left="4.425in" fo:text-indent="0.4916in">
				<style:tab-stops/>
			</style:paragraph-properties>
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P8" style:parent-style-name="Normal" style:family="paragraph">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P9" style:parent-style-name="Normal" style:family="paragraph">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P10" style:parent-style-name="Normal" style:family="paragraph">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="P11" style:parent-style-name="Normal" style:family="paragraph">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
		<style:style style:name="T12" style:parent-style-name="Policepardéfaut" style:family="text">
			<style:text-properties style:font-name="Times New Roman" style:font-name-asian="Times New Roman" fo:color="#000000" style:language-asian="fr" style:country-asian="FR"/>
		</style:style>
	</office:automatic-styles>
	<office:body>
		<office:text text:use-soft-page-breaks="true">
			<text:p text:style-name="P1">
				<text:span text:style-name="T2">FOURNISSEUR</text:span>
			</text:p>
			<text:p text:style-name="P3"/>
			<text:p text:style-name="P4"/>
			<text:p text:style-name="P5">
				<text:span text:style-name="T6">ADRESSE</text:span>
			</text:p>
			<text:p text:style-name="P7">CP</text:p>
			<text:p text:style-name="P8"/>
			<text:p text:style-name="P9"/>
			<text:p text:style-name="P10"/>
			<text:p text:style-name="P11"/>
			<text:p text:style-name="Normal">
				<text:span text:style-name="T12">NUMERO</text:span>
			</text:p>
		</office:text>
	</office:body>
</office:document-content>
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

16 Nov 2019, 02:59

Bonjour,
Merci pour ton retour, je comprend en partie ton message mais je n'arrive pas à savoir comment je le met en pratique ?

Quand vous dite que je dois utiliser "7za.exe pour extraire les fichiers"

J'essaie de replacer votre idée dans la mienne :

- Si je comprend bien mon fichier TEST2.odt doit devenir en .xml ? Donc je dois faire une conversion ?

- Ensuite ce TEST2.xml doit devenir en TEST2.zip pour l'incorporation des nouvelles données ?

- Et pour l'exploiter à nouveau ce TEST2.zip je le renomme en TEST2.odt pour pouvoir exploiter le fichier finale ?

Cela devient complexe pour moi, le drag and drop que j'avais au départ n'intervient plus ? La bonne nouvelle m'a redonner espoir mais je suis un peu perdu :roll:

HELP
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

17 Nov 2019, 22:14

Non désolé pour la confusion. Je voulais dire que les fichiers ODT sont en fait des fichiers ZIP qui contiennent des fichiers XML. I'll faudrait:

1) extraire les fichier XML à partir du fichier ODT.
2) remplacer le text dans contents.XML
3) Tout recompresser en tant que fichier ZIP
4) renommé le ZIP avec le nom Test2.ODT

Je vais posté un exemple demain. :+1:
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

18 Nov 2019, 12:03

Voici l'exemple. :thumbup:
Il faudra que tu ajustes/adaptes les variables 7z_exe, DocumentODT et la fonction ModifierLeContenu().

Code: Select all

#NoEnv
SetWorkingDir %A_ScriptDir%

; spécifier l'exécutable 7z
7z_exe:="7za.exe"

DocumentODT := "Test2.odt"

if FileExist(DocumentODT) {
	; Creer un dossier temporaire
	tmpDir := A_Temp "\tempODT"
	if FileExist(tmpDir)
		FileRemoveDir, %tmpDir%, 1
	FileCreateDir, %tmpDir%
	
	fContentXML := "content.xml"
	tmpFile := tmpDir "\" fContentXML
	
	; Extraire les fichiers
	7z_extract(DocumentODT, tmpDir)
	
	; lire le contenu de content.xml
	FileRead, fileContents, %tmpFile%
	
	; modifier le contenu
	fileContents := ModifierLeContenu(fileContents)
	
	; remplacer l'original
	FileDelete, %tmpFile%
	FileAppend, %fileContents%, %tmpFile%
	
	; recombiner et recompresser le fichier
	SplitPath, DocumentODT,,,, fNameNoExt
	newFile := fNameNoExt ".nouveau.odt"
	if FileExist(newFile)
		FileDelete, %newFile%
	7z_compressZIP(newFile, tmpDir "\*")
	
	; Fin
	MsgBox, 64, Fini!, Un nouveay fichier "%newFile%" a été créé.
} else {
	MsgBox, 16, Erreur, Le fichier "%DocumentODT%" n'existe pas...
}
return

ModifierLeContenu(data) {
	FRS2 := "42"
	ADRESSE := "42 rue Allouette"
	CP := "AZERTY"
	REJET := "Non, jamais :("
	
	StringReplace, data, data, FOURNISSEUR, %FRS2%
	StringReplace, data, data, ADRESSE, %ADRESSE%
	StringReplace, data, data, POSTAL, %CP%
	StringReplace, data, data, NUMERO, %REJET%
	
	return data
}

;modification de 7z wrapper - par joedf
; https://autohotkey.com/boards/viewtopic.php?f=6&t=3892
7z_compressZIP(dPack,files*) {
	global 7z_exe
	flist:=""
	for each, file in files
		flist:= flist """" file """" " "
	if FileExist(dPack)
		FileDelete, %dPack%
	RunWait, %7z_exe% a -tZip "%dPack%" %flist%,,Hide UseErrorLevel
	return !7z_error(ErrorLevel)
}

7z_extract(dPack,dFolder="",opts="") {
	global 7z_exe
	if StrLen(dFolder)
		out:="-o" . """" . dFolder . """"
	RunWait, %7z_exe% x "%dPack%" %out% -y %opts%,,Hide UseErrorLevel
	return !7z_error(ErrorLevel)
}

7z_error(e) {
	if (e==1)
		MsgBox, 48, 7zip Error, Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed. 
	else if (e==2)
		MsgBox, 48, 7zip Error, Fatal error 
	else if (e==7)
		MsgBox, 48, 7zip Error, Command line error 
	else if (e==8)
		MsgBox, 48, 7zip Error, Not enough memory for operation 
	else if (e==255)
		MsgBox, 48, 7zip Error, User stopped the process 
	return e
}
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

18 Nov 2019, 14:41

Nan merci beaucoup joedf !!! mais cela foncitonne pour toi ? Car moi il me dit "le document a été crée" mais au final non!

7z_exe:="7zFM.exe"

J'ai 7zfilemanager peut être que le probleme vient de la ! je suis à la recherde 7za sur le net mais il ressort pas ^^
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

18 Nov 2019, 15:19

Ca foncitonne !!! j'ai 7za.exe merci je reviens vers toi sous peu j'ai une question.

Mais tout de même ca marche je suis très content mille merci !! :superhappy:
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

18 Nov 2019, 18:20

Joedf, tout d'abord encore un grand merci une fois de plus pour m'avoir fait découvrir de nouvelle possibilité !

Le script fonctionne ce qui est déja très bien, mais n'atteint pas mon objectif du départ qui était de saisir les 4 champs a remplacer dans une interface gaphique(gui), en effet dans le script je dois changer les valeurs systematiquement [ModifierLeContenu) , hors sur l'interface je les saisis mais j'ai une interface et j'ai pas à editer le script à chaque fois,

De plus le drag and drop que j'avais au départ avait également pour but de déposer n'importe quelle dossier afin qu'il soit pas tout le temps nominatif "TEST2.odt" (DocumentODT ) à la fois dans le fichier, et a la fois dans le script. Mon souhait serais "n'importequ'ellefichier.odt"

Penses-tu que je peux allier ta fonctionnalité à mon drag and drop et gui avec des champs a saisir qui me semble plus simple pour faire des courriers à l la chaine.

Effectivement j'adore les interfaces graphiques qui me rendre la vie plus simple et dire que AHK est magique ! :P

Je sollicite une nouvelle fois ton aide on est si proche de mon but !!
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

18 Nov 2019, 22:02

Tu peux changer "DocumentODT" pour n'importe quel fichier que tu veux.
De ce que je comprends, tu recherches changer le content dans une interface office déjà ouverte / active?
Ou êtes-vous en train de dire que vous voulez créer une interface graphique personnalisée pour éditer vos fichiers ODT? :think:
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

19 Nov 2019, 14:04

Bonsoir, je suis parvenue à mon objectif avec le drag and drop ! :lol: l'interface graphique me permet de renseigner les champs que je souhaite modifier dans le .odt.

Joedf : "Tu peux changer "DocumentODT" pour n'importe quel fichier que tu veux." Oui a condition que j'en change la valeur à chaque fois.

C'est devenu mon dernier soucis, mais la solution a été rapide rapide a trouver ! :P

Solution pour un drag and drop : DocumentODT := A_GuiEvent

De ce fait maintenant je peux glisser n'importe quel fichier.odt il le recevra pour modification :lol:

Mon script a atteint 100% du résultat voulu !! Sans ton aide je n'y serais jamais arrivé ! Vive le forums FR qui facilite les questions réponses dans notre langue !

Merci beaucoup Joedf ! :superhappy: :superhappy: :superhappy: :superhappy: :superhappy: :bravo: :bravo: :bravo:
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

19 Nov 2019, 21:36

Ahh okay okay, j'avais un peu mal compris ahaha :mrgreen:
Je suis ravi que tout fonctionne correctement :+1:
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

22 Jul 2020, 11:41

Bonjour à tous et bonjour Joedf ! , j'ouvre à nouveau le sujet, car quelques bon mois après l'utilisation de mon script il me vient l'idée de le simplifier encore dans son utilisation, et je n'arrive pas à le coder.

Je nous remet un peu dans le contexte du script :
dans un gui avec des champs je renseigne des informations qui seront remplacer dans un fichier en odt.

- grâce au pouvoir magique de Joedf, j'ai pu ainsi remplacer les mots dans mes fichiers.

Mon souhait est qu'en fin d’exécution du script, est de ne pas avoir à récupérer le document dans le sous dossier où il se trouve.

Donc en fin d'exécution j'ai besoin de ceci en deux étapes :
- une ouverture du document (entre autre un aperçu avant impression)
- sous condition que j'ai pu apercevoir un aperçu du document modifier, d'un message de condition d'action : "voulez vous imprimer le documentmodifier" (oui ou non) donc si oui on envoie l'impression si non on ne fait rien.

Conformément au script proposé par Joedf cette fin doit être modifiée :

Code: Select all

if FileExist(DocumentODT) {
	; Creer un dossier temporaire
	tmpDir := A_Temp "\tempODT"
	if FileExist(tmpDir)
		FileRemoveDir, %tmpDir%, 1
	FileCreateDir, %tmpDir%
	
	fContentXML := "content.xml"
	tmpFile := tmpDir "\" fContentXML
	
	; Extraire les fichiers
	7z_extract(DocumentODT, tmpDir)
	
	; lire le contenu de content.xml
	FileRead, fileContents, %tmpFile%
	
	; modifier le contenu
	fileContents := ModifierLeContenu(fileContents)
	
	; remplacer l'original
	FileDelete, %tmpFile%
	FileAppend, %fileContents%, %tmpFile%
	
	; recombiner et recompresser le fichier
	SplitPath, DocumentODT,,,, fNameNoExt
	newFile := fNameNoExt ".nouveau.odt"
	if FileExist(newFile)
		FileDelete, %newFile%
	7z_compressZIP(newFile, tmpDir "\*")
(cette fin à modifier)
******

Code: Select all

	; Fin
	MsgBox, 64, Fini!, Le nouveau fichier "%newFile%" est cree.
} else {
	MsgBox, 16, Erreur, Le fichier "%DocumentODT%" n'existe pas...
}
return
[Mod edit: [code][/code] tags added.]
*****

Merci par avance pour l'aide dans ce script. :wave: :wave:
User avatar
joedf
Posts: 8940
Joined: 29 Sep 2013, 17:08
Location: Canada
Contact:

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt  Topic is solved

22 Jul 2020, 13:52

De ce que je comprends, tu veux rajouter une option pour l'impression? :ugeek: :think:

Pour avoir une boîte de message avec oui/non:

Code: Select all

MsgBox, 36, , Voulez-vous imprimer le document modifié?
IfMsgBox, Yes 
{
	; Oui, on imprime le document!
} else {
	; Non, on fait rien...
}

Pour imprimer un document ODT, dépendamment si tu as OpenOffice ou LibreOffice d'installé, on peut utiliser les commandes suivantes:
OpenOffice: Run, soffice.exe -p "C:\Utilisateurs\Admin\Documents\MonFichier.odt" - Plus d'info
LibreOffice: Run, libreoffice.exe -p "C:\Utilisateurs\Admin\Documents\MonFichier.odt" - Plus d'info
ou bien l'option Windows générique / générale: Run, print "C:\Utilisateurs\Admin\Documents\MonFichier.odt" - Plus d'info
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500, NVIDIA GTX 1060 6GB, 2x16GB Kingston FURY Beast - DDR4 3200 MHz | [About Me] | [About the AHK Foundation] | [Courses on AutoHotkey]
[ASPDM - StdLib Distribution] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library]
alexooo
Posts: 23
Joined: 16 Jul 2018, 13:50

Re: REMPLACER UN MOT DANS UN TEXTE FORMAT .odt

23 Jul 2020, 15:50

Tout d'abord merci pour ce rapide retour !
Tu as bien compris mon dernier objectif qui était d'imprimer le doc.odt

Tout de même précision sur le cheminement voulu :
1 : le remplacement de texte et création du nouveau doc.odt (ce que le script fait bien)
2 : l'aperçu du nouveau doc.odt j'insiste sur l'aperçu qui peut ce matérialiser par l'ouverture du nouveau doc.odt (étape qui me permet de contrôler les remplacements fait et me montré un erreur de saisie)
3 : proposition oui ou non d'impression
4 : action d'impression sur le cas ou oui est choisie sur la msgbox évidemment

Et tout ceci dans la chaîne global d'exécution (libreoffice installé évidement)

Merci beaucoup par avance joedf ! J'aimerais t'envoyer des fleurs si possible car sans ton aide je ne parviendra pas à un résultat.
Alex.

Return to “J'ai besoin d'aide”

Who is online

Users browsing this forum: No registered users and 25 guests