Mischen Sie 70.000 RTF / DOC-Dateien in eine

3351
Andrew

Ich möchte 70.000 RTF- und DOC-Dateien zu einer zusammenführen.

Ich habe versucht, Microsoft Word 2010 zu verwenden und "Einfügen" → "Objekt" → "Text aus Datei" auszuführen. Es gibt jedoch einige Einschränkungen, da es nicht mehr als ein paar Dutzend Dateien zusammenfügt, unabhängig davon, wie viele Dateien Sie auswählen .

Gibt es (vorzugsweise Open Source) -Dienstprogramme, die eine solche Menge an Dateien relativ schnell zusammenführen können?

2
Ich würde sagen, die Aufgabe mit VBA oder etwas Ähnlichem automatisieren. Ich selbst würde entweder dieses oder das AutoIt-Tool verwenden, das wahrscheinlich ein schnelles und schmutziges Skript mit zehn Zeilen ergibt, um die manuelle Operation des Einfügens eines Objekts zu wiederholen. minya vor 11 Jahren 0
OK, schlechte Nachrichten, da ich keine besonderen Programmierfähigkeiten besitze.) Könnten Sie / jemand anderes helfen, ein Makro zu schreiben, das unter Windows 7 64-Bit / MS Word 2010 ausführbar ist? Ich bin kein Noob, aber ich habe selbst keine VBA-Programmierung vorgenommen. Die Dateien befinden sich grundsätzlich in EINEM Ordner im Format 1.rtf, 2.rtf, ... Andrew vor 11 Jahren 0

2 Antworten auf die Frage

3
minya

Here you go. I'm currently knee-deep in AutoIt, so I used that. You can get the tool itself at autoitscript.com.

Notes:

  • I bound Ctrl+Shift+I to Word's InsertFile command, you should do the same for the script to work. Google it or look up on StackExchange.

  • The script works from assumption that an empty document is already open in MS Word and that there is only one MS Word window.

  • Modify the value of $locationOfRtfFiles to match your setup. It must point to the folder containing the RTFs.

  • The sleep interval may require adjustment (depends on performance of your computer and the size/complexity of RTF files)

The code (a bit over 10 lines, but let's hope no one is counting):

; Some common sense stuff, look it up in the docs AutoItSetOption("TrayIconDebug", 1) AutoItSetOption("MustDeclareVars", 1) ; Tell AutoIt to match the substring anywhere in the window title AutoItSetOption("WinTitleMatchMode", 2) ; find a window by title and some contained text (optional), ; make it active and wait for the window to become ; active Func MyWinWait($title, $keytext = "") WinWait($title, $keytext) WinActivate($title, $keytext) WinWaitActive($title, $keytext) Return EndFunc Local $locationOfRtfFiles = "C:\MyCollectionOfRtfPorn" ; for every file in the set For $fileIndex = 1 to 70000 ; focus on the main Word window MyWinWait("Microsoft Word") ; emulate Ctrl+Shift+I Send("i") ; wait for the Insert File window to open MyWinWait("Insert File") ; type out a file's name Send($locationOfRtfFiles & "\" & $fileIndex & ".rtf") ; confirm selection Send("") ; sleep for 10 seconds before proceeding to next file Sleep(10000) Next 

You may want to adjust the cycle limit based on the actual number of RTFs. Also, if the naming of the files does not follow the numbering scheme you originally specified, the script will need changes.

1) Vielen Dank! Spasibo bol'shoe, rabotaet! Ja tozhe russkij! (/ Vielen Dank, es funktioniert. Ich bin auch Russisch /) 2) Es ist wunderschön, aber ein bisschen primitiv, und sobald Sie weniger als 1 Sekunde schlafen, gibt es keinen wirklichen Effekt. Das heißt, es ist langsam. Welches ist die Hauptschwäche dieses Skripts. Aber ich bin beeindruckt und es ist eine funktionierende Lösung :) Ich bin mit "Macro Expert" vertraut, daher frage ich mich, wie man dieses Skript auf unter 1 Sekunde pro Datei beschleunigen könnte. Ansonsten schaue ich auf Tage der Verschmelzung. Andrew vor 11 Jahren 0
Andrew, du bist willkommen. Das Problem bei der Verkürzung der Wartezeit besteht darin, dass AutoIt (in diesem Fall) nicht zuverlässig wissen kann, ob die Einfügung abgeschlossen ist. Ein VBA-Skript hätte dieses Problem natürlich nicht, also habe ich ein fertiges Beispiel für Sie gegoogelt :) http://blogs.technet.com/b/heyscriptingguy/archive/2005/05/03/how-can -i-insert-files-in-a-word-document.aspx Ich glaube, dass dies mit der mit InsertFile erreichbaren Höchstgeschwindigkeit funktionieren sollte. Ein anderer Ansatz kann zu einer besseren Leistung führen, aber ich hoffe aufrichtig, dass Sie keine 70k-RTFs regelmäßig zusammenführen müssen. :) minya vor 11 Jahren 0
Der letzte Code auf dieser Site funktioniert einwandfrei, ABER er nimmt die Dateien nicht in der Reihenfolge, in der sie im Verzeichnis angeordnet sind. Anstelle von 1.rtf, 2.rtf dauert es 1.rtf, dann 10321.rtf usw. Kann dies irgendwie behoben werden? Vielen Dank :) Andrew vor 11 Jahren 0
http://stackoverflow.com/questions/5417979/batch-rename-sequential-files-by-padding-with-zeroes (verwenden Sie das Batch-Skript aus dieser Frage; es muss etwas angepasst werden) minya vor 11 Jahren 0
1
Cokal

If you are using a unix OS use the following:

textutil -cat rtf *.rtf *.doc -output combinedFiles.rtf 
Ich dachte, .doc, .rtf und so ziemlich jedes Microsoft-Dokumentformat hätte einen Header und die resultierende Datei würde nur einen Header benötigen. LawrenceC vor 11 Jahren 1
Ich bin unter Windows 7, wie oben erwähnt, also ist das leider keine Lösung. Andrew vor 11 Jahren 0
Der Befehl `textutil` ist auf den meisten Unix-Systemen nicht vorhanden. Es ist auf MacOSX und wahrscheinlich auf anderen von BSD abgeleiteten Systemen, nicht jedoch auf Ubuntu, CentOS, Solaris oder Cygwin. Keith Thompson vor 11 Jahren 0