Word-UDF, Dokumente verbinden

    • Offizieller Beitrag

    Hi,
    hier mal eine Funktion um verschiedene Word-Dokumente in einem neuen Dokument zu verbinden.
    Wahlweise kann das neue Dokument angezeigt werden.
    Existieren eine/mehrere der übergebenen Dateien nicht, wird das Dokument mit den vorhandenen Dateien erstellt aber ein Fehler (inkl. Anzahl fehlender Dateien) ausgegeben.

    _WordCombineDocs
    [autoit]

    ;===============================================================================
    ; Function Name: _WordCombineDocs($sNewDocPath, $aPathDocs, $fNewDocOpen = False)
    ; Description: verbindet Worddokumente in einem neuen Dokument (Dokumente bleiben erhalten)
    ; Parameter(s): $sNewDocPath - kpl. Pfad des neuen Dokuments
    ; $aPathDocs - Array mit den Pfaden der zu verbindenden Dokumente
    ; $fNewDocOpen - das neue Dokument öffnen
    ; $fVisible - wenn $fNewDocOpen=True das neue Dokument anzeigen od. nicht
    ; Return Value(s): Erfolg - WordObjekt (Word vorher nicht aktiv und $fNewDocOpen=False), sonst
    ; 1
    ; Teilerfolg WordObjekt od. 1 und @error 2: eine/mehrere Dateien nicht gefunden
    ; @extended = Anzahl fehlender Dateien
    ; Fehler - 0 @error= 1 (kein Array übergeben)
    ; 3 keine Datei gefunden
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _WordCombineDocs($sNewDocPath, $aPathDocs, $fNewDocOpen = False, $fVisible = False)
    If Not IsArray($aPathDocs) Then Return SetError(1,0,0)
    Local $err = 0, $iErr = 0, $oWord, $sFileName, $fWordExists = False
    If ProcessExists('WINWORD.EXE') Then
    $oWord = ObjGet('', "Word.Application")
    $fWordExists = True
    Else
    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = False
    EndIf
    $oWord.Documents.Add("")
    For $i = 0 To UBound($aPathDocs) -1
    If Not FileExists($aPathDocs[$i]) Then
    $iErr += 1
    ContinueLoop
    EndIf
    With $oWord.Selection
    .EndKey(6)
    .InsertBreak(7)
    .InsertFile($aPathDocs[$i])
    EndWith
    Next
    If $iErr Then
    $err = 2
    If $iErr = UBound($aPathDocs) Then
    If Not $fWordExists Then $oWord.Application.Quit(0)
    Return SetError(3,0,0)
    EndIf
    EndIf
    $oWord.ActiveDocument.SaveAs($sNewDocPath)
    If $fNewDocOpen Then
    $oWord.Visible = $fVisible
    $sFileName = StringRight($sNewDocPath, StringLen($sNewDocPath)-StringInStr($sNewDocPath, '\', 1, -1))
    WinActivate($sFileName)
    Return SetError($err,$iErr,$oWord)
    Else
    If Not $fWordExists Then
    $oWord.Application.Quit(-1)
    Return SetError($err,$iErr,1)
    EndIf
    EndIf
    EndFunc ;==>_WordCombineDocs

    [/autoit]