Page 1 sur 1

[..] Fonction _Word_DocRangeSet

Posté : ven. 08 janv. 2021 16:57
par jpascal
Bonjour,

Je souhaiterais ouvrir un nouveau document Word, ajouter du texte et sélectionner la totalité du document.

J'ai du mal à comprendre l'aide AutoIt et Microsoft :
https://www.autoitscript.fr/autoit3/doc ... ngeSet.htm
https://docs.microsoft.com/en-us/office ... a-document

Je voudrais simplement ajouter du texte et une image dans un objet Word, puis le sélectionner entièrement.

J'arrive à le faire uniquement avec du texte :
#include <Word.au3>

Local $oWord = _Word_Create()
Local $oDoc = _Word_DocAdd($oWord)
Local $oRange = _Word_DocRangeSet($oDoc, 0)
$oRange.InsertAfter("Text" & @CRLF)
$oRange.Select
MsgBox(0, 0, "Pause")
_Word_DocClose($oDoc)

Je peux ajouter une image mais elle sera affichée avant mon texte :
#include <Word.au3>

Local $oWord = _Word_Create()
Local $oDoc = _Word_DocAdd($oWord)
Local $oRange = _Word_DocRangeSet($oDoc, 0)
$oRange.InsertAfter("Text" & @CRLF)
_Word_DocPictureAdd($oDoc, 'C:\Program Files (x86)\AutoIt3\Examples\GUI\merlin.gif');, Default, Default, $oRange)
$oRange.Select
MsgBox(0, 0, "Pause")
_Word_DocClose($oDoc)
Je souhaiterais pouvoir l'ajouter à la fin du texte.

En fait ce que je ne sais pas faire c'est sélectionner tout le contenu d'un document avec la fonction _Word_DocRangeSet()

P.S. : je pourrais m'en sortir en insérant dans un premier temps l'image puis en utilisant des InsertBefore mais bon...

Re: [..] Fonction _Word_DocRangeSet

Posté : sam. 09 janv. 2021 17:38
par walkson
Bonjour,
La grande difficulté avec Word est de se placer dans le texte
Voici un essai

Code : Tout sélectionner

#include <Word.au3>

Local $oWord = _Word_Create()
Local $oDoc = _Word_DocAdd($oWord)
Local $oRange = _Word_DocRangeSet($oDoc, -1)
For $i = 1 To 5
$oRange.InsertAfter("Text " & $i & @CRLF)
Next
Local $oRange = _Word_DocRangeSet($oDoc, -2)
_Word_DocPictureAdd($oDoc, 'C:\Program Files\AutoIt3\Examples\GUI\merlin.gif', Default, Default, $oRange)
$oRange = _Word_DocRangeSet($oDoc, -2,$wdParagraph,-6)
$oRange.Select
$oRange.InsertAfter(@CRLF & "Text autre ")
;MsgBox(0, 0, "Pause")
;_Word_DocClose($oDoc)
Pour tout sélectionner, on peut aussi utiliser $oWord.Selection.WholeStory

Re: [..] Fonction _Word_DocRangeSet

Posté : lun. 11 janv. 2021 13:55
par jpascal
Bonjour walkson,

Merci pour la solution.

Néanmoins, si je ne sais pas combien de paragraphes compte le document, ou que j'ouvre un document qui contient déjà du texte, comment puis-je faire pour définir un "range" correspondant à tout le document ?

Re: [..] Fonction _Word_DocRangeSet

Posté : lun. 11 janv. 2021 15:51
par walkson
Bonjour,
Dans l'exemple suivant, j'utilise $oWord.Selection.WholeStory qui sélectionne tout

Code : Tout sélectionner

#include <Word.au3>
Const $wdColorOrange = 26367
Const $wdToggle = 9999998
Local $oWord = _Word_Create()
Local $oDoc = _Word_DocAdd($oWord)
Local $oRange = _Word_DocRangeSet($oDoc, -1) ;Définit début/fin de la plage au début du document
For $i = 1 To 5
$oRange.InsertAfter("Text " & $i & @CRLF)
Next
$oRange = _Word_DocRangeSet($oDoc, -2) ;Définit début/fin de la plage à la fin du dcoument
_Word_DocPictureAdd($oDoc, 'C:\Program Files\AutoIt3\Examples\GUI\merlin.gif',Default,Default,$oRange)
$oWord.Selection.WholeStory ;sélectionne tout
$oWord.Selection.Range.Font.TextColor = $wdColorOrange
$oWord.Selection.Range.Font.Bold = $wdToggle
$oWord.Selection.Range.Font.Size = 14
;$oWord.ActiveDocument.Range(1,1).Select ;se place au 1 premier caractère
$pos = _Word_DocRangeSet($oDoc, -2)
$pos.Select						;ou se place à la fin du doc
$oWord.ActiveDocument.Saved = True ;;pour ne pas enregistrer le doc