Umzug des Vorlagenpfades in Worddateien

  • Hallo,

    ich habe da ein kleines Problem und konnte bislang keine Lösung mit AutoIt erstellen.
    Wir verwendeten zentral abgespeicherte Vorlagen-Dateien in Word. Jetzt hat sich der Pfad auf einen allgemein standardisierten Pfad geändert und jetzt müssen diese Pfade angepasst werden. Bei Microsoft habe ich ein VBA-Skript gefunden
    http://web.archive.org/web/2005030406…t.com/kb/830561
    und nach etwas herumprobieren auch ans Laufen gebracht (s. u.). Allerdings schön ist etwas anderes...

    Jetzt wollte ich das ganze aus Word-VBA herauslösen und mit AutoIt machen, damit ich es auch direkt auf dem Server starten kann. Außerdem um es etwas grafisch aufzupeppen...
    Dies scheint jedoch nicht so einfach zu sein, zum Einen werde ich vermutlich doch die COM-Objekte von Word benötigen, zum Anderen habe ich keine Ahnung, wie ich die Funktion Dialogs(wdDialogToolsTemplates) in AutoIT realisiere...
    Desweiteren konnte ich bislang nur den Namen der Vorlage auslesen, nicht jedoch den Pfad: "\\ServerA\VORLAGEN\WORD\MeineVorlagen.dot"...

    [autoit]

    #include <File.au3>
    #include <Word.au3>
    $oWordApp = _WordCreate (@ScriptDir & "\MeineWordDatei.doc")
    $oDoc = _WordDocGetCollection ($oWordApp, 0)
    MsgBox(0, "Template", _WordDocPropertyGet ($oDoc, "Template"))

    [/autoit]

    Ich habe daraufhin nach VBS Alternativen gesucht, leider haben diese bei mir nicht funktioniert und das Debuggen ist etwas knifflig, wenn man sich nicht auskennt...:
    http://forum.vb-paradise.de/programmieren/…lates-umziehen/
    http://www.edugeek.net/forums/scripts…e-location.html

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

    Einmal editiert, zuletzt von ahe (4. Juni 2009 um 15:33)

  • Nun habe ich mich direkt mit ObjCreate versucht, jedoch mit "mäßigem" Erfolg...
    Wenn ich das folgende VB Skript ausführe, erhalte ich als Ergebnis "normal.dot", beim anschließenden AutoIt Skript wird jedoch nur eine leere MsgBox angezeigt. Was mache ich falsch?

    VBS: (allerdings bekomme ich mit dieser Methode nur die normal.dot angezeigt, nicht jedoch wenn ich eine auf dem Server einstelle:
    "\\ServerA\VORLAGEN\WORD\MeineVorlagen.dot")

    Code
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Open("c:\temp\MeineWordDatei.doc")
    Set objTemplate = objDoc.AttachedTemplate
    WScript.Echo objTemplate 
    objWord.Quit


    AutoIT:

    [autoit]

    $objWord = ObjCreate("Word.Application")
    $objDoc = $objWord.Documents.Open ("D:\heimann\LDPackages\Word_Template_kill\01-08 Schukra.doc")
    $objTemplate = $objDoc.AttachedTemplate
    MsgBox(0,"template test", $objTemplate)
    $objDoc.Close
    $objWord.Quit

    [/autoit]

    Kann es sein, dass es nur möglich ist die Vorlagen zu verändern, wenn man VBA benutzt? (Bislang konnte ich auch keine VBS Lösung herausbekommen...)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Habe ich das richtig verstanden, das Du die "normal.dot" austauschen möchtest gegen die welche Du hast?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Alina,
    da hast du mich wohl missverstanden, oder ich habe es etwas "ungeschickt" ausgedrückt, war 'halt spät... :)

    Ich habe einen Haufen Word-Dateien, die alle eine Formatvorlage eingetragen haben, die es entweder nicht mehr gibt, oder aber deren Pfas falsch ist (das passiert halt, wenn man keine Aliase sondern Servernamen im Pfad verwendet...:-|). Dies verlängert die Ladezeiten eines 90KB großen Dokuments (egal wo es liegt, ob lokal oder im Netz) auf ca. 30 Sekunden. (User-Gefühl: 10 Minuten ;) )

    Das angegebene VBA Skript ersetzt jetzt diesen Vorlagen-Pfad-Eintrag durch einen anderen bzw., wenn man keinen anderen eingibt, wird die normal.dot automatisch genommen.
    Da ich es ziemlich lästig finde erst Word zu starten und dann das Makro ausführen zu können, dachte ich man könnte es ja mit VBS oder AutoIt machen. Außerdem wäre ein rekursives Durchgehen von Verzeichnissen dann der nächste Schritt...

    Aus lauter Verzweiflung ;( habe ich jetzt erst einmal versucht überhaupt eine Info über eine Formatvorlage aus irgendeiner Word-Datei zu bekommen, z. B. die normal.dot (s. mein 2. Posting), das klappt allerdings nur in VBS, nicht jedoch in AutoIT ?(

    Nun stellt sich mir die Frage, ob es überhaupt möglich ist an diese Information zu kommen, ohne VBA zu nutzen... (s. a. die Funktion Dialogs() in VBA). Da ich mich mit den Objekten und deren Programmieren überhaupt nicht auskenne (bin nur ein einfacher Feld-Wald-und-Wiesen-Admin) stehe ich jetzt ziemlich ratlos da... 8|

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • So wie es aussieht, habe ich eine Möglichkeit gefunden den Pfad der (zusätzlichen) Vorlage zu ermitteln: :D (manchmal hilft die Online-Hilfe von VBS doch...)

    AutoIT Variante:

    [autoit]

    #include <WindowsConstants.au3>

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

    Const $wdDialogToolsTemplates = 87

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

    $objWord = ObjCreate("Word.Application")
    $objDoc = $objWord.Documents.Open ("c:\temp\MeineWordDatei.doc")
    $objTemplate = $objDoc.AttachedTemplate
    $dlgTemplate = $objWord.Dialogs($wdDialogToolsTemplates)
    $strPath = $dlgTemplate.Template

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

    MsgBox(0,"template test", $strPath)
    $objDoc.Close
    $objWord.Quit

    [/autoit]

    VBSkript Variante:

    Code
    Const wdDialogToolsTemplates = 87
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Open("c:\temp\MeineWordDatei.doc")
    Set objTemplate = objDoc.AttachedTemplate
    Set dlgTemplate = objWord.Dialogs(wdDialogToolsTemplates)
    strPath = dlgTemplate.Template
    WScript.Echo strPath 
    objWord.Quit

    Jetzt muss ich nur noch den Austausch des alten Pfades gegen einen neuen hinbekommen, dann die Pfadeingabe zu den Word-Dateien variabel gestalten, ggfs. den Pfad rekursiv durcharbeiten lassen.

    Vielleicht wäre es auch gut eine Abfrage zu machen, ob der Austausch gewünscht ist oder nur eine Auflistung der Dateien mit ihren Vorlagen erstellt werden soll, des Weiteren ob vielleicht nur ein Teil des Pfades ersetzt werden soll...

    Vielleicht hat ja noch jemand Lust etwas zu basteln... ;)

    Jetzt erst einmal gute Nacht...
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.