Mit Autoit Dateiinhalt kopieren und in Worddatei einfügen

  • Hallo an alle Spezialisten,

    ich muss öfters anhand von selbst erstellten Screenshots eine Worddatei erstellen, in der ich die Bilder nacheinander(Strukturierte Liste = 1, 1.1, 1.2 etc.) einfügen muss.
    Um nicht jedes Bild einzeln via Word-Einfüge-Dialog auszuwählen und dann einzugfügen, hätte ich gerne ein Script dazu erstellt. Eine GUI mit Drei Buttons habe erstellt.
    Beim Klick auf den Button "Bilder einfügen" soll AutoIt also die Dateiliste der Sreenshots durchgehen und dann(ggf. via Clipboard) das jeweils nächste Bild in Word(Cursor wird vorher an die richtige Stelle gesetzt) einfügen.

    Die Dateiliste ist im Array gespeichert und ich habe sie auch zum Testen per _Arraydisplay ausgegeben. Ich scheitere leider daran;(;(;(, eine Schleife zu erstellen, die das Array durchgeht, mir das erste Bild in Word einfügt(im Prinzip wie die Datei im Explorer manuell rechts anklicken > kopieren dann in Word rechtsklick > einfügen) und den Zähler um eins hoch setzt. Dann nachdem ich den Cursor in Word an die nächste Stelle gesetzt habe, will ich die Funktion erneut ausführen(ButtonClick) und sie soll mir dann das nächste Bild einfügen, usw.

  • Vielleicht kürzt dieser Ansatz die mögliche Hilfe ab:

    Code
    local $Path1 = ("C:\Users\MeinUser\Pictures\Screenpresso\FTS_D957_Advcd_Acous_Mgmt_cfg.png")    # Testpfad einer Screenshotdatei
    $fTest = _ClipPutFile($Path1)                                                                   # Laden der Datei in den Zwischenspeicher
    Local $Win_Fenster = WinGetHandle($Name)
    WinActivate($Win_Fenster)                                                                       # Aktivierung des Wordfensters
    Send("^v")                                                                                      # Einfügen des Bildes in Worddatei

    Mit dem Code gelingt es eine einzelne Datei in Word einzufügen. Könnte mir jetzt noch jemand sagen wie ich das in eine Schleife packe damit ich bei Buttonklick das nächste Bild im Verzeichnis laden kann?

  • Hallo Water,

    vielen Dank für deinen Codevorschlag. Eine Frage noch: Was macht, bzw. wofür ist die Variable $oDoc da. Die gibt den Fehler aus sie sei nicht deklariert:/

    vergiss es, hab's in der Hilfe gesehen...:saint:

  • $oDoc ist das Objekt des Word-Dokumentes. Das erhältst Du, wenn Du ein neues Dokument anlegst (Funktion _Word_DocAdd), ein bestehendes Dokument öffnest (Funktion _Word_DocOpen) oder Dich an ein bereits geöffnetes Dokument anhängst (Funktion _Word_DocAttach).

  • Hallo Water,

    danke für deine Erklärung. Kannst du mir verraten ob es i-wie möglich ist, die Schleife so zu bauen, dass ich sie, wenn sie rummurkst, abbrechen kann. Es kommt immer wieder vor, dass das
    Senden von Tastenkombis fehlschlägt(Warum auch immer?) und etwas völlig anderes macht, als es soll. Der Beenden-Button hilft da nicht. Bei einem Durchgang mit 35 Bildern fing das Script an rum zu spinnen. =O
    Sah aus als würde der Rechner ausflippen.=O Mit Müh und Not, konnte ich es per Taskmanager killen.:whistling:

  • Mit meinem Codevorschlag brauchst Du keine Tastenkombinationen mehr zu senden! Damit erledigt sichd as Problem von selbst.

    Falls nicht, poste mal den gesamten Code. Aber alles was Word betrifft geht über die Word UDF oder das Word Objekt Modell direkt.

  • Hallo Water,

    die Tastenkombis brauche ich auch für die Größenanpassung des eingefügten Bildes und für das Einfügen eines Seitenumbruchs nach jedem zweiten Bild oder geht das auch anders?
    Bis auf die immer mal wieder auftretenden Aussetzer funzt alles. Leider bekam ich deine Schleife nicht zum laufen. Es kommt immer der Fehler 3. Kann es sein, dass das Word UDF/Word Object Model
    Docx-Dateien nicht unterstützt?

    Das ist meine Funktion:

    Deine Funktion nach Anpassung des Bild-Pfades(ohne Seitenumbruch und Größenanpassung! Der Pfad in $Path1 ist im Übrigen korrekt.):

  • Die Automatisierung des GUIs von Word ist sehr, sehr unzuverlässig (wie Du ja siehst). Die Mischung von COM und GUI Automatisierung würde ich nicht empfehlen.

    Die UDF unterstützt auch das DOCX-Format.
    Fehler 3 heisst: Error occurred when adding the specified picture. @extended is set to the COM error code


  • Beispiel wie es funktioniert. Die mit "<== ANPASSEN" markierten Zeilen ensprechend anpassen:

  • Hallo Water,

    zunächst vielen lieben Dank. Das Einfügen klappt beinahe so wie ich es benötige. Zwei Probs habe ich noch:

    Zeile 18 u. 19: sind das Pixel und wenn ja geht das dann auch i-wie mit cm o. mm?

    Zeile 20: Geht das auch mit dem Ende einer Seite oder nur mit dem Ende des Dokumentes(die Bilder werden eig. zwischen Einleitung und Schlussbemerkung eingefügt. Aktuell wird das erste Bild richtig eingefügt und ab dem 2. Bild geht es dann auf der nächsten Seite weiter)

    Kann auch damit zusammenhängen, dass das Script die Bildgröße(Global $Hoehe = "9,6 cm"; Global $Breite = "17,50 cm") nicht annimmt(siehe Prob 1;))

  • Zeile 18/19: Das sind Point. Umrechnungsfunktionen:

    Einfügen am Ende der Seite geht sicher auch. Das problem ist, dass durch die eingefügten Bilder ja das Dokument länger wird. Wie soll dann der nächste einfügepunkt gefunden werden? Gibt es ein Kennzeichen, das das Ende einer Seite signalisiert? Oder einen Platzhalter im Dokument, wo die Bilder eingefügt werden sollen?

  • Guten Morgen Water,

    vielen Dank für die Umrechnungsfunktionen. zum Einfügepunkt: Bei meinem Entwurf hatte ich es ja so realisiert, das die Schleife nach jedem 2. Bild direkt danach den Seitenumbruch setzte.
    Also immer 2 Bilder und 1 Seitenumbruch. Aber es würde auch so gehen. Dann füge ich die Schlussbemerkung eben nachträglich hinzu. Vielleicht fummle ich noch am Programm herum, sofern ich im
    Büro die Zeit dazu finde. Auf jeden Fall ist das Thema damit erledigt. Möge dir deine Hilfestellung mit reichlich Kindersegen und Seelenheil vergolten werden. Schönes WE, gesegneten Appetit und
    frohe Weihnachten, usw.;):D8o

  • Hallo Water, es gibt doch noch eine Frage: Da ich bzgl. der Größenanpassung in der Hilfe leider nichts finden kann muss ich doch nochmal nachfragen.

    Das Script oder Word 2016 scheint ein Prob damit zu haben. Wenn ich die Werte für Hoehe und Breite(Umgerechnet) eingebe kommt bei der Größenanpassung nur Murks in Word an.
    Wenn ich die Hoehe und die Breite gleich groß eingebe, z.B. 10 cm und lasse umrechnen, kommt in Word eine Grafik mit den Werten 0,35cm H und 18,55cm Breite an. Hast du eine Idee
    woran das liegen könnte?

  • Seelenheil ist in Ordnung, vor Kindersegen mögen mich die edlen Produkte der Firma Durex schützen ;)

  • Fehler gefunden!!!:D:klatschen::klatschen:

    Man muss die Zahlen im Format 9.6 und nicht 9,6 angeben und Breite in Englisch schreibt man Width und nicht Widht( getippter Fehler in der Variablen-Bezeichnung

    $oShape.Width Vgl. Zeile 18 ) allso alles gut soweit. Jetzt klappts auch mit der Größe. :part::part::part::part:

  • Seelenheil ist in Ordnung, vor Kindersegen mögen mich die edlen Produkte der Firma Durex schützen

    Sorry für diesen 'Leerbeitrag', aber der Satz wird mir garantiert den ganzen Tag retten :rofl:

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo Water,

    noch ne Frage:

    ich habe in die Schleife folgenden Code eingefügt

    Code
    $oLine = _Word_DocAttach($oDoc, @CR)
            $oLine = $oRange.InsertBreak(6)
            $oLine = $oRange.InsertBreak(6)

    um zwischen den Bilde eine Zeile Abstand zu haben.

    wie kann ich das dann aber vor dem Seitenumbruch wieder entfernen? Gibt es so etwas wie DeleteBreak(6)?

  • Ein Break ist ein (unsichtbares) Zeichen im Text. In der Hilfe findest Du unter _Word_DocRangeSet im letzten Beispiel, wie man Zeichen wieder löscht.