Word-Dok. ergänzen

  • Hallo,

    hat jemand schonmal was mit MS Word gemacht? Unzwar habe ich ein Word-Dokument mit freien Feldern, also Lücken und die möchte ich gerne von AutoIt aus füllen bzw. auch auslesen, falls man das Dokument manuell verändert. Kann mir da jemand einen Ansatz geben?

    Edit: Prost!!! 333ster Post ^^

    Einmal editiert, zuletzt von m-obi (5. Februar 2010 um 01:10)

  • Hallo m-obi,

    ich habe zwar auf meinem NetBook kein Word installert, aber poste trotzdem bitte ein Doc-File, vielleicht kann ih es ja mit OpenOffice analysieren und dir den richtigen Ansatz geben,

    mfg (Auto)Bert

  • Habs die per PN geschickt, möchte es nicht hier einstellen, das es sich um ein Dokument aus meiner Firma handelt. Die roten Wörter sind Platzhalter dort soll halt später das geschehen, was ich beschrieben habe in meinem 1. Post.

  • Hallo
    mir ist nicht so ganz klar, was du meinst.Ich vermute mal, dass du die Wordfunktionen umgehen und über AutoIt ausführen willst. Das dürfte aber nicht gehen, da Word dafür zu komplex ist.

    Du musst also die in Word eingebauten Funktionen nutzen (Serienbrieffunktion, VBA). Du kannst Daten aus einer mit AutoIt erstellten Datei am Einfachsten mit der Serienbrieffunktion in Word übernehmen. Zum Auslesen von Daten aus Word musst du vorher ein Makro schreiben, das du dann über AutoIt starten kannst. Die gewünschten Daten werden in eine Datei geschrieben, die du anschliessend mit AutoIt auswerten kannst.

    Viele Grüsse
    Detlef

    • Offizieller Beitrag

    Es gibt eine Word-UDF, die vielleicht auch Suchen und Ersetzen kann.
    Wenn du die Möglichkeit hast, im Word-2007-Format zu speichern, kannst du die Docx-Datei auspacken (ist ein Zip-Archiv) und dann die content.xml (aus dem Kopf) ändern. Das ist einfach XML. Danach wieder zusammenpacken et voil`a :).

    Johannes

  • Ist leider 2003, sonst wäre das wahrscheinlich ideal. Die Word-UDF hab ich schon durchforstet, die hilft mir nicht dabei. Ich schau dann mal weiter.

    • Offizieller Beitrag

    Du hast recht, die Word-UDF ist gelinde gesagt Sch... . :S
    Ich arbeite da immer direkt mit dem Word Objekt Modell

    Hier mal ein kurzes Bsp.:

    Spoiler anzeigen
    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = True
    $oDoc = $oWord.Documents.Open ('C:\Test.doc') ; eine bestehende Datei aufrufen
    ; für Absätze = Paragraphs, für Sätze = Sentences, für Wörter = Words, für Zeichen = Character
    $countS = $oDoc.Sentences.Count
    $oSelect = $oDoc.Sentences($countS -1).Select ; markiert vorletzten Satz

    [/autoit]

    Lies dich mal etwas ein, ist nicht so sehr schwierig.

  • Also dein Vorschlag bringt mich schonmal ein weites Stückchen weiter. Nun wie schließe ich denn nun wieder das Dokument? Ich habe es versucht mit

    [autoit]

    $oWord.Documents(@ScriptDir & '\Test.doc').Close(Word.WdSaveOptions.wdSaveChanges)

    [/autoit]


    aber das klappt nicht, er meckert wegen dem "Word".

    OK ich habs nun geschafft.

    Achja und wie bekomme ich von dem

    [autoit]

    $oSelect = $oDoc.Sentences(2).Select

    [/autoit]


    den String?
    OK hab auch dies geschafft. Mit

    [autoit]

    $oDoc.Sentences(2).Copy
    $sString = ClipGet()
    ConsoleWrite($sString)

    [/autoit]

    2 Mal editiert, zuletzt von m-obi (5. Februar 2010 um 00:29)

  • Sooo habs nun auch geschafft mit dem Einfügen und dem Auslesen.

    Einfügen:

    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = False
    $oDoc = $oWord.Documents.Open(@ScriptDir & '\Test.doc')
    ; für Absätze = Paragraphs, für Sätze = Sentences, für Wörter = Words, für Zeichen = Character
    $oDoc.Sentences(2).Select
    $oDoc.Sentences(2).Text = "Test"
    $oWord.ActiveDocument.SaveAs(@ScriptDir & '\Test2.doc')
    $oWord.ActiveDocument.Close()
    $oWord.Quit()

    [/autoit]

    Auslesen:

    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = False
    $oDoc = $oWord.Documents.Open(@ScriptDir & '\Test2.doc')
    ; für Absätze = Paragraphs, für Sätze = Sentences, für Wörter = Words, für Zeichen = Character
    $oDoc.Sentences(2).Copy
    $sString = ClipGet()
    ConsoleWrite($sString)
    $oWord.ActiveDocument.Close()
    $oWord.Quit()

    [/autoit]


    Dann geh ich jetzt mal in die Schlafboje. Hab für heute genug geschafft. Nun kann ich beruhigt einschlafen. :rolleyes: :sleeping:

    Edit: Beim Einfügen kann man die Zeile mit dem Select rausnehmen, die braucht man nicht.

    Einmal editiert, zuletzt von m-obi (5. Februar 2010 um 13:42)