Worddatei aulesen?

  • das ist schon mal nicht schlecht aber denke das ist auch in ein paar zeilen machbar...

    was muss ich hier verändern das es klappt:

    [autoit]


    #include <Word.au3>
    $oWordApp = _WordCreate ("")
    $oDoc = _WordDocOpen ($oWordApp, "dat.doc")
    _WordDocFindReplace($oDoc, "und", "u.", 2, 0, 0, 0, 0, 0, 0, 1, 1, 0)
    _WordDocSave($oDoc)
    _WordDocClose($oDoc, -2, 2, 0)

    [/autoit]

    ( es soll ja keine umwandlung stattfinden wenn das geht )

    Einmal editiert, zuletzt von team2way (5. April 2009 um 16:48)

    • Offizieller Beitrag

    OK, hier mal eine Lösung (allerdings verwende ich nicht die Word.au3, sondern führe die Objektaktionen direkt aus):

    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = True
    $oDoc = $oWord.Documents.Open ('C:\Test.doc') ; hier der KOMPLETTE Pfad zu deiner Datei
    $range = $oDoc.Range
    $oFind = $range.Find
    With $oFind
    .ClearFormatting()
    .Replacement.ClearFormatting()
    .Execute("SUCH-Begriff", 0, 0, 0, 0, 0, 1, 1, 0, "ERSETZEN-Begriff", 1) ; letzter Parameter 0/1/2 gibt an ob nicht/1-mal/alles ersetzt werden soll
    EndWith
    $oDoc.Save()

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

    $oDoc.Close
    $oWord.Quit

    [/autoit]
  • thx...bei mir kommt hier allerdings immer die fehlermeldung:
    $oDoc = $oWord.Documents.Open('Test.doc') ^ERROR
    Error: The requested action with this object has faild

    woran könnte das liegen?
    (die datei befindet sich in der scriptdir)

    Edit: hab grad gesehn das das eine word 2000 version ist...macht das was aus?

    mfg team2way

  • Wenn im Quellcode drinsteht, das die datei in "C" gesucht wird, warum tuhst sie dann ins scriptdir ?... entweder code ändern oder Datei nach "C" packen

  • sry das ichs nicht dazugesagt hab...hab den code verändert auf scriptdir

    Zitat

    $oWord.Documents.Open('Test.doc')


    aber daran liegt der fehler - stimmt

    also mit C:\Text.doch klappts jetzt aber es kommt wieder ein fehler in zeile 11 beim speichern
    $oDoc.Save()^ERROR
    Error: The requested action with this object has faild

    Edit: habs grad mal getestet
    wenn man die befehle:

    [autoit]

    ;$oDoc.Save()
    ;$oDoc.Close

    [/autoit]


    weglässt kommt kein fehler^^
    und noch mal geht das ganze auch ohne das öffnen der word datei (also verstäckt)
    und der veränderte text soll dann in eine andere word datei gespeichert werden???

    2 Mal editiert, zuletzt von team2way (5. April 2009 um 18:41)

    • Offizieller Beitrag

    $oWord.Visible = True <== die Zeile entfernen, dann läuft es versteckt. Zum Testen ist es ganz vorteilhaft, man sieht was passiert.

    Zum Speichern unter: Die Funktion hatte ich schon benannt $oDoc.SaveAs()
    Syntax:

    [autoit]

    $oDoc.SaveAs ($s_FilePath,0,0,'',0,'',0) ; den VOLLEN Pfad angeben!!

    [/autoit]


    Und gib mal deinen kpl. Code an, der Fehler mit dem Objekt darf nicht auftreten, dann ist irgendwas anders als in meinem Bsp.

  • [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = True
    $oDoc = $oWord.Documents.Open ('C:\Test.doc') ; hier der KOMPLETTE Pfad zu deiner Datei
    $range = $oDoc.Range
    $oFind = $range.Find
    With $oFind
    .ClearFormatting()
    .Replacement.ClearFormatting()
    .Execute("hallo", 0, 0, 0, 0, 0, 1, 1, 0, "ersetzt ;)", 2) ; letzter Parameter 0/1/2 gibt an ob nicht/1-mal/alles ersetzt werden soll
    EndWith
    $oDoc.Save()
    $oDoc.Close
    $oWord.Quit

    [/autoit]


    hier kommt zunächst der fehler bei save und dann bei close...

    Edit: Auch wenn ich saveas so einbaue kommt bei mir der fehler

    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = True
    $oDoc = $oWord.Documents.Open ('C:\Test.doc') ; hier der KOMPLETTE Pfad zu deiner Datei
    $range = $oDoc.Range
    $oFind = $range.Find
    With $oFind
    .ClearFormatting()
    .Replacement.ClearFormatting()
    .Execute("hallo", 0, 0, 0, 0, 0, 1, 1, 0, "ersetzt ;)", 2) ; letzter Parameter 0/1/2 gibt an ob nicht/1-mal/alles ersetzt werden soll
    EndWith
    ;$oDoc.Save()
    $oDoc.SaveAs ('C:\Test2.doc',0,0,'',0,'',0) ; den VOLLEN Pfad angeben!!
    $oDoc.Close
    $oWord.Quit

    [/autoit]

    Einmal editiert, zuletzt von team2way (5. April 2009 um 20:03)

    • Offizieller Beitrag

    Ich verwende Office 2000, da geht es tadellos. Welche Version hast du?
    Füge mal zur Fehlersuche nach Zeile 3, 4 und 10 eine Objektprüfung ein:

    [autoit]

    ConsoleWrite('Objekt? = ' & IsObj($oDoc) & @CRLF)

    [/autoit]


    Es hat den Anschein, als ob die Referenz auf das Objekt verschwunden ist? Kann ich allerdings nicht nachvollziehen weshalb das passieren soll.