Word UDF - Bild in .docx Dokument platzieren

  • Hallo,
    ich nutze das Word-UDF (nicht WordEx) und versuche ein Bild, an einer bestimmten Stelle, in ein Word-Dokument einzufügen.
    Meine Vorstellung dazu ist, dass im Word-Dokument ein Platzhalter (hier im Beispiel dx_bild) eingefügt wird und das Bild dann am Platz dx_bild eingefügt wird.
    Dieses sollte analog der Funktion _WordDocFindReplace erfolgen, damit im gesamten Word-Dokument das Bild am Platzhalter erscheint.

    Hier ein leidlicher Versuch dieses mit _WordDocFindReplace umzusetzen. Es funktioniert nur leider nicht. Das Bild wird stets am Anfang des Dokuments eingefügt.

    Spoiler anzeigen
    [autoit]


    #include <Word.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $file = @ScriptDir & "\Testbild.png" ; irgendein Bild

    [/autoit] [autoit][/autoit] [autoit]

    Local $oWordApp = _WordCreate(@scriptdir & "\Test.docx") ; beinhaltet einen Platzhalter dx_bild als Text und wird durch _WordDocFindReplace... ersetzt
    Local $oDoc = _WordDocGetCollection($oWordApp, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local $oShape = _WordDocAddPicture($oDoc, $file, 0, 1)
    If Not @error Then $oShape.Range.InsertAfter(_WordDocFindReplace($oDoc, "dx_bild", _WordDocAddPicture($oDoc, $file, 0, 1)))

    [/autoit]

    Ein Testbild füge ich der Vollständigkeithalber bei. Die Test.docx sieht exemplarisch so aus - beachte den Eintrag dx_bild:

    Spoiler anzeigen


    Die Formatierung von markiertem Text im Dokumenttext kann auf einfache Weise geändert werden, indem Sie im Schnellformatvorlagen dx_bild Katalog auf der Registerkarte 'Start' ein Layout für den markierten Text auswählen. Text können Sie auch direkt mithilfe der anderen Steuerelemente auf der Registerkarte 'Start' formatieren. Die meisten Steuerelemente ermöglichen die Auswahl zwischen dem Layout des aktuellen Designs oder der direkten Angabe eines Formats.

    Wie ist es korrekt, dass ein Bild an einem bestimmten Text (dx_bild) eingefügt wird?

    Herzlichen Dank für Eure Unterstützung.

  • Da _WordDocFindReplace 1 zurückgibt kann dein Versuch nicht funktionieren. Nimm statt dessen den Weg über die Zwischenablage.

    Zitat

    _WordDocFindReplace

    Startet die angegebene "Suchen und Ersetzen"-Operation.
    ...
    Rückgabewert

    Erfolg: Gibt 1 zurück
    ...
    Bemerkungen

    Man kann durch passende Zeichencodes nach Sonderzeichen suchen. Zum Beispiel entspricht "^p" dem Paragraphenzeichen, "^t" dem Tabulatorzeichen.

    Sonderzeichen und erweiterte Suchkriterien kann man genauso wie bei einem angegebenen Suchtext festlegen. Um ein Grafik-Objekt oder andere 'Nicht-Text-Zeichen' als Ersetzung anzugeben, ist das entsprechende Zeichen in die Zwischenablage zu kopieren und für $s_ReplaceWith "^c" einzusetzen.

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (9. Januar 2013 um 23:01)

  • Danke, autoBert - das setze ich so um...


    Spar dir die Mühe, ich habe es getestet schaffe es aber nur Text damit ein zu fügen. Eine andere Möglichkeit ist in das Dokument eine Textmarke einzufügen und ein Makro zu erstellen (im Dokument speichern), dass an die Tetmarke springt:

    Code
    Sub GeheZuTextmarke (Dateiname)
    '
    ' GeheZuTextmarke Makro
    ' Makro erstellt am 10.01.2013 von autoBert
    '
        Selection.GoTo What:=wdGoToBookmark, Name:="Bild1"
        Selection.InlineShapes.AddPicture FileName:=Dateiname, _
            LinkToFile:=False, _
            SaveWithDocument:=True
    End Sub

    Dies kannst du dann über AutoIt aufrufen:

    [autoit]

    #include <Word.au3>

    [/autoit][autoit][/autoit][autoit]

    $sfile = @ScriptDir & "\testbild.png" ; irgendein Bild
    $oWordApp = _WordCreate(@ScriptDir & "\Test.doc")
    _WordMacroRun($oWordApp,"GeheZuTextmarke",$sfile)
    _WordQuit($oWordApp)

    [/autoit]

    mfg autoBert

  • Hallo autoBert,
    das ist ja toll, dass Du das noch testest und einen alternative Lösung präsentierst. Vielen vielen Dank.

    Die erzeugte Grafik (BMP-File) wird mit _ClipBoard_SetDataEx an die Zwischenablage übergeben. Dann ist diese, so wie von Dir ursprünglich beschrieben, in das Dokument einfügbar. Dein Lösungsweg ist absolut korrekt gewesen.
    (Funktionsbeispiel habe ich aus dem QR-Creator 1.0 von BugFix entnommen)

    Herzlichen Dank und Gruß
    qwert23

  • Die erzeugte Grafik (BMP-File) wird mit _ClipBoard_SetDataEx an die Zwischenablage übergeben.


    Ich hatte es mit _ClipBoard_SetData probiert bin aber nicht ans Ziel gekommen.

    Dann ist diese, so wie von Dir ursprünglich beschrieben, in das Dokument einfügbar. Dein Lösungsweg ist absolut korrekt gewesen.
    (Funktionsbeispiel habe ich aus dem QR-Creator 1.0 von BugFix entnommen)

    War nur gelesenes wiedergegeben. Ich werd wohl meinen "Titel" ändern müssen BugFix QR-Creator habe ich in diesem Zusammenhang nicht gefunden.

    Kannst du ein (abgespecktes) Beispiel deiner Lösung für die Nachwelt hier verewigen, danke

    mfg autoBert

  • Bin derzeit im Urlaub, werde aber naechste Woche eine Loesung posten.