Page 1 sur 1
[R] Insérer image et texte dans Word
Posté : mer. 12 févr. 2014 22:44
par Hugues
Bonjour,
Je suis confronté à un soucis de mise en page avec Word.
En effet, je souhaite intégrer dans un fichier Word une image et le contenu d'un fichier texte.
Je voudrais que ma feuille soit en paysage, l'image à gauche et la partie texte à droite de mon image...
J'ai déjà "bricolé" quelque chose, mais soit l'image est avant ou bien après...
Si joint mon code:
► Afficher le texte
Code : Tout sélectionner
Func _CopyPictureAndTXTFileToWord()
;On créer l'instance
$oWord = _Word_Create()
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, "Impression courbe", "Erreur de création document Word." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On ouvre le fichier Word
$oDoc = _Word_DocOpen($oWord, @ScriptDir & "\Print.doc", Default, Default, True)
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, "Impression courbe", "Erreur d'ouverture 'Print.doc'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On définit l'orientation de la page (le cas présent Paysage)
$oDoc.PageSetup.Orientation = $wdOrientLandscape
$oRange = _Word_DocRangeSet($oDoc, -1)
;On ajoute l'image enregistrée sous @ScriptDir
_Word_DocPictureAdd($oDoc, @ScriptDir & "\PrintPicture.jpg", Default, Default, $oRange)
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, "Impression courbe", "Erreur de copie image." & @CRLF & " @error = " & @error & ", @extended = " & @extended)
;On ajoute le texte
Local $PFile = "Print.txt"
Local $asArray
If Not _FileReadToArray($PFile, $asArray) Then MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error)
$oRange = _Word_DocRangeSet($oDoc, -1, -1, 0, -1)
$oTable = _Word_DocTableWrite($oRange, $asArray, 1)
EndFunc
Edit: En fait pour que mon image et mon texte soit juxtaposés, il faudrait que j'insère une zone de texte dans laquelle je viens mettre mon image... mais là je sais pas faire...

-> Faux, complètement faux, maintenant je sais ^^
Voici le code pour ceux que ça intéresse (provient du site anglais

):
► Afficher le texte
Code : Tout sélectionner
#include <Word.au3>
;WdTextOrientation
Const $wdTextOrientationHorizontal = 0
Const $wdTextOrientationUpward = 2
Const $wdTextOrientationDownward = 3
Const $wdTextOrientationVerticalFarEast = 1
Const $wdTextOrientationHorizontalRotatedFarEast = 4
Const $wdTextOrientationVertical = 5
Global $iLeft = 50, $iTop = 50, $iWidth = 200, $iHeight = 200
$sFilePath = @ScriptDir & "\Test.doc"
_WordErrorHandlerRegister()
$oWordApp = _WordCreate($sFilePath, 1)
$oDoc = _WordDocGetCollection($oWordApp, 0)
; Left, Top, Width, Height, Anchor
$oShape = $oDoc.Shapes.AddCanvas($oWordApp.PixelsToPoints($iLeft), $oWordApp.PixelsToPoints($iTop), $oWordApp.PixelsToPoints($iWidth), $oWordApp.PixelsToPoints($iHeight))
; Orientation, Left, Top, Width, Height
;~ $oTextbox = $oShape.CanvasItems.AddTextbox($wdTextOrientationHorizontal, 1, 1, $oShape.Width - 1, $oShape.Height - 1) ; I would expect this to work.
$oTextbox = $oShape.CanvasItems.AddTextbox($wdTextOrientationVertical, 1, 1, $oShape.Width - 1, $oShape.Height - 1) ; This does work however.
; Get the range object of the textbox.
$oRange = $oTextbox.TextFrame.TextRange
$oTextbox.Line.Visible = False
; Insert a picture into the textbox.
_WordDocAddPicture($oDoc, @ScriptDir & "\test.jpg", False, True, $oRange)
Merci.
Re: [..] Insérer image et texte dans Word
Posté : jeu. 13 févr. 2014 12:01
par walkson
Bonjour,
Comme le texte est un tableau, j'ai rajouté une colonne où se met l'image.
► Afficher le texte
Code : Tout sélectionner
#include <Word.au3>
#include <File.au3>
Global const $wdInsertCellsEntireColumn = 3
Global Const $wdPreferredWidthPercent = 2
_CopyPictureAndTXTFileToWord()
Func _CopyPictureAndTXTFileToWord()
;On créer l'instance
$oWord = _Word_Create()
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur de création document Word." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On ouvre le fichier Word
$oDoc = _Word_DocOpen($oWord, @ScriptDir & "\test.doc", Default, Default, True)
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur d'ouverture 'Print.doc'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On définit l'orientation de la page (le cas présent Paysage)
$oDoc.PageSetup.Orientation = $wdOrientLandscape
;On ajoute le texte
Local $PFile = "test.txt"
Local $asArray
If Not _FileReadToArray($PFile, $asArray) Then MsgBox(0, "", "There was an error reading the file. @error: " & @error)
$oRange = _Word_DocRangeSet($oDoc, -1, -1, 0, -1)
$oTable = _Word_DocTableWrite($oRange, $asArray, 1)
$oword.Selection.InsertCells ($wdInsertCellsEntireColumn);rajout colonne
$oword.Selection.Rows(1)
$oword.Selection.Cells.Merge;fusion des cells colonne 1
$oword.Selection.Tables(1).PreferredWidthType = $wdPreferredWidthPercent
$oword.Selection.Tables(1).PreferredWidth = 100
_Word_DocPictureAdd($oDoc, @ScriptDir & "\test.jpg", Default, Default, Default)
EndFunc
Fonctionne sous Office 2007
Re: [..] Insérer image et texte dans Word
Posté : jeu. 13 févr. 2014 21:45
par Hugues
Ok, je teste et j'en dit des nouvelles ^^

Re: [..] Insérer image et texte dans Word
Posté : ven. 14 févr. 2014 12:27
par walkson
Bonjour,
Une petite rectif pour $oword.Selection.Rows(1) qui doit être $oword.Selection.Columns(1).Select comme suit:
► Afficher le texte
Code : Tout sélectionner
#include <Word.au3>
#include <File.au3>
Global const $wdInsertCellsEntireColumn = 3
Global Const $wdPreferredWidthPercent = 2
Global Const $wdAutoFitContent = 1
Global Const $wdAutoFitWindow = 2
_CopyPictureAndTXTFileToWord()
Func _CopyPictureAndTXTFileToWord()
;On créer l'instance
$oWord = _Word_Create()
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur de création document Word." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On ouvre le fichier Word
$oDoc = _Word_DocOpen($oWord, @ScriptDir & "\test.doc", Default, Default, True)
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur d'ouverture 'Print.doc'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On définit l'orientation de la page (le cas présent Paysage)
$oDoc.PageSetup.Orientation = $wdOrientLandscape
;On ajoute le texte
Local $PFile = "test.txt"
Local $asArray
If Not _FileReadToArray($PFile, $asArray) Then MsgBox(0, "", "There was an error reading the file. @error: " & @error)
$oRange = _Word_DocRangeSet($oDoc, -1, -1, 0, -1)
$oTable = _Word_DocTableWrite($oRange, $asArray, 1)
$oword.Selection.InsertCells ($wdInsertCellsEntireColumn);rajout colonne
$oword.Selection.Columns(1).Select
$oword.Selection.Cells.Merge;fusion des cells colonne 1
$oword.Selection.Tables(1).PreferredWidthType = $wdPreferredWidthPercent
$oword.Selection.Tables(1).PreferredWidth = 100
_Word_DocPictureAdd($oDoc, @ScriptDir & "\test.jpg", Default, Default, Default)
$oWord.Selection.Tables(1).AutoFitBehavior ($wdAutoFitWindow)
$oWord.ActiveDocument.InlineShapes.Item(1).Width = 200
$oWord.ActiveDocument.InlineShapes.Item(1).Height = 200
EndFunc
Sinon, il y a la possibilité de ne pas passer par un array (plus rapide, il me semble)
Code : Tout sélectionner
#include <Word.au3>
Global const $wdInsertCellsEntireColumn = 3
Global Const $wdPreferredWidthPercent = 2
Global Const $wdAutoFitContent = 1
Global Const $wdAutoFitWindow = 2
Global Const $wdWord9TableBehavior = 1
$oWord = _Word_Create()
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur de création document Word." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On ouvre le fichier Word
$oDoc = _Word_DocOpen($oWord, @ScriptDir & "\test.doc", Default, Default, True)
If @error <> 0 Then Exit MsgBox(0, "Impression courbe", "Erreur d'ouverture 'Print.doc'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;On définit l'orientation de la page (le cas présent Paysage)
$oDoc.PageSetup.Orientation = $wdOrientLandscape
;On ajoute le texte
Local $PFile = @ScriptDir & "\test.txt"
;creation tableau 1 ligne 2 colonnes
$oWord.ActiveDocument.Tables.Add ($oWord.Selection.Range, 1, 2, $wdWord9TableBehavior, $wdAutoFitContent)
$oword.Selection.Tables(1).Columns(2).Select
;ajout texte
$oWord.Selection.InsertFile ($PFile, "", False, False, False)
$oword.Selection.Tables(1).Columns(1).Select
;ajout image
_Word_DocPictureAdd($oDoc, @ScriptDir & "\test.jpg", Default, Default, Default)
;mise en forme de l'image
$oWord.ActiveDocument.InlineShapes.Item(1).Width = 200
$oWord.ActiveDocument.InlineShapes.Item(1).Height = 400
Rmq: les chemins texte et image sont à adapter
Re: [..] Insérer image et texte dans Word
Posté : lun. 17 févr. 2014 10:08
par Hugues
Ok, merci beaucoup!
J'ai pris la deuxième solution plus rapide et mieux au niveau mise en page.