c't 12/04
Dass Word in der Zieldatei nur den Inhalt der ersten Quelldatei anzeigt, liegt am Dateiformat: Sowohl doc- als auch rtf-Dateien enthalten am Anfang neben Informationen über Autor oder verwendete Formate auch eine Angabe über die Größe der Datei. Diese wertet Word aus und zeigt die Datei eben nur bis zu dieser Grenze an. Ein neuer Datei-Header mitten im Dokument, wie er beim Zusammenkopieren entsteht, ist im Dateiformat nicht vorgesehen.
Um mehrere doc- oder rtf-Dateien zusammenzukopieren, muss man Word selbst bemühen, damit am Ende wieder ein gültiges Dokument herauskommt. Das lässt sich glücklicherweise automatisieren: Über den Soft-Link erhalten Sie die Windows-Script-Host-Skripte DocCollect.vbs und RTFCollect.vbs, die das erledigen. Um sie im schnellen Zugriff zu haben, kopieren Sie sie zweckmäßigerweise in das Windows-Verzeichnis.
Als Aufrufparameter erwarten beide Skripte ein Verzeichnis, in dem sie dann nach doc- beziehungsweise rtf-Dateien suchen, und den Namen der zu speichernden zusammengefügten Datei. Ein typischer Aufruf auf der Eingabeaufforderung sieht etwa so aus
DocCollect.vbs Protokolle AlleProtokolle.doc
und demonstriert, dass die Skripte mit relativen Pfaden umgehen können. (hos)
Set args = WScript.Arguments
srcDir = args(0)
destFName = args(1)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.GetFolder(srcDir)
Set fils = fol.Files
Set doc = CreateObject("Word.Document")
Set sel = doc.range
liste = ""
For Each fil in fils
If LCase(Right(fil.path, 4)) = ".doc" Then
sel.InsertFile fil.path, , False
sel.Collapse 0
liste = liste & fil.path & vbCr
End If
Next
destFName = fso.GetAbsolutePathName(destFName)
If Len(liste) > 0 Then doc.SaveAs destFName
doc.Close
DocCollect.vbs (hier ohne Fehlerbehandlung) kopiert alle Word-Dokumente aus einem Ordner in eine Datei zusammen.
Version zum Drucken | Per E-Mail versenden | Heft bestellen
Permalink: http://heise.de/-316642
Das aktuelle Heft ist jetzt im Handel erhältlich.
Ältere Artikel können Sie über unser Zeitschriften-Archiv bestellen.