
37414
04.09.2015, aktualisiert um 12:25:17 Uhr
Text per Batchdatei kopieren und einfügen
Hallo,
ich würde gerne für meine Kollegen eine kleine Hilfe basteln...
Wir nutzen ein Programm, in dem auch Memos in ein Textfeld geschrieben werden.
Dieser Text soll jeweils möglichst einfach in eine Word-Datei kopiert und diese dann in einem bestimmten Verzeichnis und unter einem bestimmten Dateinamen (Nummer) abgespeichert werden.
Dazu müßten folgende Schritte per Batchdatei (od. sonstigem Script) ausgeführt werden:
- den Text aus dem Memofeld komplett kopieren (quasi Strg + A / Strg + C)
- dann ein neues Word-Dokument öffnen
- nun den eben kopierten Text dort einfügen
- nun das Dokument im Verzeichnis "S:\MV\Memos" speichern inkl. Vergabe eines Dateinamens (eine Nummer)
Wäre sowas umsetzbar?
Oder gibt es ein kleines Programm, welches einfach all diese Schritte aufzeichnet und womit man diese dann per Klick ausführen kann?
Danke und Gruss,
imebro
ich würde gerne für meine Kollegen eine kleine Hilfe basteln...
Wir nutzen ein Programm, in dem auch Memos in ein Textfeld geschrieben werden.
Dieser Text soll jeweils möglichst einfach in eine Word-Datei kopiert und diese dann in einem bestimmten Verzeichnis und unter einem bestimmten Dateinamen (Nummer) abgespeichert werden.
Dazu müßten folgende Schritte per Batchdatei (od. sonstigem Script) ausgeführt werden:
- den Text aus dem Memofeld komplett kopieren (quasi Strg + A / Strg + C)
- dann ein neues Word-Dokument öffnen
- nun den eben kopierten Text dort einfügen
- nun das Dokument im Verzeichnis "S:\MV\Memos" speichern inkl. Vergabe eines Dateinamens (eine Nummer)
Wäre sowas umsetzbar?
Oder gibt es ein kleines Programm, welches einfach all diese Schritte aufzeichnet und womit man diese dann per Klick ausführen kann?
Danke und Gruss,
imebro
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 281981
Url: https://administrator.de/forum/text-per-batchdatei-kopieren-und-einfuegen-281981.html
Ausgedruckt am: 27.04.2025 um 04:04 Uhr
47 Kommentare
Neuester Kommentar

Wäre sowas umsetzbar?
Ja, kein Problem. Würde ich schnell mit Auto-It als EXE / VBS / Powershell umsetzen damit kannst du das gewünschte Fenster der Anwendung aktivieren Text kopieren und via COM-Object neues Word-Dokument anlegen.Dazu müsste man hier aber wissen wie der Titel des Anwendungsfensters oder der Prozessname heißt.
Gruß jodel32
Für absolute Programmierdaus gibts auch das hier:
https://www.jitbit.com/macro-recorder/

Zitat von @37414:
Das läuft gut... aber wie mache ich das, dass dieses Makro an der Stelle, wo die Nummer eingegeben werden muss, wartet und nach der Eingabe weiter läuft?
Das läuft gut... aber wie mache ich das, dass dieses Makro an der Stelle, wo die Nummer eingegeben werden muss, wartet und nach der Eingabe weiter läuft?
nummer = InputBox("Bitte Nummer eingeben:")

Och nö ... das musst du vorher in eine separate Zeile einsetzen und noch in den Dateinamen mit einbauen !
Mit meiner Zeile weißt du die Nummer ja nur einer Variablen zu !
Mit meiner Zeile weißt du die Nummer ja nur einer Variablen zu !

nummer = InputBox("Bitte Nummer eingeben:")
fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".docx"
ActiveDocument.SaveAs FileName:=fname , FileFormat:=wdFormatXMLDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False
Application.Quit

Wenn du im Dokument selber Makros hast musst du als docm speichern, sollte eigentlich klar sein ...
Einfach mal in die Doku reinschauen anstatt jeden Furz nachzufragen.
https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.doc ...
Für Docx
bei Makros mit docm:
wdFormatXMLDocumentMacroEnabled
Einfach mal in die Doku reinschauen anstatt jeden Furz nachzufragen.
https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.doc ...
Für Docx
FileFormat:=wdFormatXMLDocument
wdFormatXMLDocumentMacroEnabled

AutoIT ist für sowas sehr gut geeignet, trotzdem sollte man ein Minimum an Programmierfähigkeiten mitbringen. Mit Klicki-Bunti ist es da nicht getan wenn man das vernünftig und zuverlässig machen will.
Aber hier kennt ja keiner deine ominöse Anwendung so dass man dir ein Beispiel posten könnte. Was erwartest du also...
Gruß grexit
Aber hier kennt ja keiner deine ominöse Anwendung so dass man dir ein Beispiel posten könnte. Was erwartest du also...
Gruß grexit

Moin,
ließt du unsere Posts eigentlich mal genau ?
Ohne deine uns unbekannte Anwendung zu kennen, wissen wir ja gar nicht welchen Prozess oder Fenster wir in den Vordergrund holen müssen um dann noch das "richtige" Steuerelement auszuwählen, den Text zu markieren und zu kopieren. Das ist essentiell zum Schreiben eines solchen Skriptes!!!
Also bei AutoIT gibt es ein Tool das heißt WindowInfo, damit kann man sich die von uns für ein Beispiel benötigten Infos zum Fenster anzeigen lassen.
Auf dieser Basis kann man hier dann ein Beispiel Posten, aber so ganz ohne Info von dir ist das leider nur im Blindflug möglich, das sollte dir eigentlich klar sein.
Gruß grexit
p.s. Ihr arbeitet nicht wirklich noch mit Word 2000 ?
ließt du unsere Posts eigentlich mal genau ?
Ohne deine uns unbekannte Anwendung zu kennen, wissen wir ja gar nicht welchen Prozess oder Fenster wir in den Vordergrund holen müssen um dann noch das "richtige" Steuerelement auszuwählen, den Text zu markieren und zu kopieren. Das ist essentiell zum Schreiben eines solchen Skriptes!!!
Also bei AutoIT gibt es ein Tool das heißt WindowInfo, damit kann man sich die von uns für ein Beispiel benötigten Infos zum Fenster anzeigen lassen.
Auf dieser Basis kann man hier dann ein Beispiel Posten, aber so ganz ohne Info von dir ist das leider nur im Blindflug möglich, das sollte dir eigentlich klar sein.
Gruß grexit
p.s. Ihr arbeitet nicht wirklich noch mit Word 2000 ?

Zitat von @37414:
ist. Es nützt also nichts, wenn ich hier angebe, wie das Programm heißt...
Du hast keine Ahnung von AutoIT aber weißt was wir nicht benötigen, das nenn ich mal ganz schlau ! Kopfschüttel ...ist. Es nützt also nichts, wenn ich hier angebe, wie das Programm heißt...
Im AutoIT habe ich jetzt nach "WindowInfo" (o.ä.) gesucht, aber nichts gefunden.
Wie komme ich denn an dieses Tool und wie setze ich das ein, um Euch die benötigten Infos geben zu können?
https://www.autoitscript.com/autoit3/docs/intro/au3spy.htmWie komme ich denn an dieses Tool und wie setze ich das ein, um Euch die benötigten Infos geben zu können?

Das ist doch endlich mal eine Aussage.... Das sieht dann so aus:
Es gibt bestimmte Fenster bei denen sich sich die Controls auf diese Methode nicht auslesen lassen. Aber für diesen Fall kann man es dann einfach über die SendKeys() Methode erledigen.
Statt Zeile 14 dann einfach folgendes einfügen. Bei Bedarf eine kleine Pause sleep(500) zwischen CTRL-A und CTRL-C einfügen falls es nicht klappt
Und dann zusätzlich anstatt Zeile 22 wieder ein CTRL-V
Du siehst die Syntax ist ziemlich ähnlich wie VB also sehr leicht zu erlernen. Der Vorteil von AutoIt ist seine Portabilität, denn es kompiliert EXEs die ohne irgendwelche Frameworks lauffähig sind.
Gruß grexit
#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
if WinWaitActive($wintitle,"",5) = 0 then
msgbox(16,"Timeout","Konnte Fenster nicht finden!")
exit 1
EndIf
; retrieve text of control
$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")
; Word starten
$objWord = ObjCreate("Word.Application")
; leeres Dokument hinzufügen
$doc = $objWord.Documents.Add()
; make word visible
$objWord.Visible = true
; insert text into document
$doc.Content.Text = $text
Statt Zeile 14 dann einfach folgendes einfügen. Bei Bedarf eine kleine Pause sleep(500) zwischen CTRL-A und CTRL-C einfügen falls es nicht klappt
Send("^a")
Send("^c")
Du siehst die Syntax ist ziemlich ähnlich wie VB also sehr leicht zu erlernen. Der Vorteil von AutoIt ist seine Portabilität, denn es kompiliert EXEs die ohne irgendwelche Frameworks lauffähig sind.
Gruß grexit

Moin,
wieso jetzt doppelt gemoppelt ein Makro starten? Du kannst alles was du in Word mit dem Makro machst auch gleich in AutoIt mit dem Word-Objekt machen, das hat vollen Zugriff auf das Objektmodell.
Ansonsten musst du sagen in welchem Codeabschnitt genau dein Makro liegt (ThisDocument / In einem Modul (wie lautet der Name des Moduls) / In einem AddIn Dokument/ etc. pp) damit ich dir sagen kann wie man es starten kann.
wieso jetzt doppelt gemoppelt ein Makro starten? Du kannst alles was du in Word mit dem Makro machst auch gleich in AutoIt mit dem Word-Objekt machen, das hat vollen Zugriff auf das Objektmodell.
Ansonsten musst du sagen in welchem Codeabschnitt genau dein Makro liegt (ThisDocument / In einem Modul (wie lautet der Name des Moduls) / In einem AddIn Dokument/ etc. pp) damit ich dir sagen kann wie man es starten kann.

Zitat von @37414:
ich könnte also einfach den VB-Scriptcode im AutoIT-Code einfügen?
Neeee, das wäre so als ob man an ein Auto Fahrradreifen montiert ich könnte also einfach den VB-Scriptcode im AutoIT-Code einfügen?
Oder hab ich das falsch verstanden?
Natürlich muss man es geringfügig an die Syntax von AutoIt anpassen:#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
if WinWaitActive($wintitle,"",5) = 0 then
msgbox(16,"Timeout","Konnte Fenster nicht finden!")
exit 1
EndIf
; retrieve text of control
$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")
; Word starten
$objWord = ObjCreate("Word.Application")
; leeres Dokument hinzufügen
$doc = $objWord.Documents.Add()
; make word visible
$objWord.Visible = true
; insert text into document
$doc.Content.Text = $text
; get number input from user
$number = InputBox("Nummer vergeben","Bitte Nummer eingeben:")
; Save document
$objWord.SaveAs("S:\ARCHIV\Mittelvergabe\Memos\" & $number & ".doc")
; close document
$doc.Close()
; close word
$objWord.Quit()

Geht hier problemlos, schau mal "hinter" dein Word-Fenster ... 
Du kannst auch das Word-Fenster einfach mit false ausblenden ... das muss nicht sichtbar sein, das war nur zu Debug-Zwecken drin.
Du kannst auch das Word-Fenster einfach mit false ausblenden ... das muss nicht sichtbar sein, das war nur zu Debug-Zwecken drin.

Zitat von @37414:
Vielleicht liegt es daran, dass es ein altes Word ist (Word 2000)?
Nein, die Funktion ist unabhängig von der Word-Version, weil sie aus der AutoIt Bibliothek stammt ...Vielleicht liegt es daran, dass es ein altes Word ist (Word 2000)?

Zitat von @37414:
Wie könnte ich denn das Desktop-Makro in AutoIT starten, anstatt den Code aus Zeile 24 - 31 zu nutzen?
Wie wärs mal mit Doku lesen:Wie könnte ich denn das Desktop-Makro in AutoIT starten, anstatt den Code aus Zeile 24 - 31 zu nutzen?
https://www.autoitscript.com/autoit3/docs/functions/RunWait.htm

Zitat von @37414:
OK... habe ich gelesen.
Funktioniert dennoch nicht, wenn ich per Run (oder RunWait) Befehl versuche, das Makro (memo.vbs) vom Desktop zu starten.
hm, das muss aber irgendwie bei dir liegen, denn beides was @122990 hier gepostet hat funktioniert hier auch problemlos.OK... habe ich gelesen.
Funktioniert dennoch nicht, wenn ich per Run (oder RunWait) Befehl versuche, das Makro (memo.vbs) vom Desktop zu starten.
Aber so wie ich mir deine anderen Threads angucke, hat da selten einer weniger als 20 posts ... scheint immer nur bei dir Probleme zu geben, Zufall ?
Über dein System kennen wir hier auch so gut wie nix
Office 2000 wasn'dat für ein Museum in dem du arbeitest

Wie allseits bekannt ist, startet man vbs-Skripte über CMD-Aufrufe natürlich über wscript.exe, das hast du 100% vergessen 
RunWait("wscript.exe ""C:\Pfad\test.vbs""")

OMG , "Hände über Kopf zusammenschlag" ..... das kann nicht gehen, da du in deinem VBS das Word-Objekt ja garnicht erzeugst ... VBS und Word sind zwei paar Schuhe.
Mach mal einen Programmiergrundkurs ... das wird mir hier jetzt echt zu blöd.
Mach mal einen Programmiergrundkurs ... das wird mir hier jetzt echt zu blöd.

SCITE als Editor nutzen, dann passieren dir nicht so viele Fehler... und alles läuft so wie es soll (auch das von grexit :-P)
Und ein Makro das schon in einem Dokument in einem Modul liegt kann man so in AutoIT starten:
$MOUSE_CLICK_LEFT Das ist ja auch eine Variable und keine Konstante ...
MouseClick ( "button" [, x, y [, clicks = 1 [, speed = 10]]] )
https://www.autoitscript.com/autoit3/docs/functions/MouseClick.htm
Einfach mal die Doku lesen ....
Und ein Makro das schon in einem Dokument in einem Modul liegt kann man so in AutoIT starten:
$objWord.Run("memo")
$MOUSE_CLICK_LEFT Das ist ja auch eine Variable und keine Konstante ...
MouseClick("left",200,200)
https://www.autoitscript.com/autoit3/docs/functions/MouseClick.htm
Einfach mal die Doku lesen ....

Wenn ich jetzt noch eine Prüfung mit rein nehmen könnte, ob das Dokument schon existiert
Null Problem ...Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists("Pfad zu deiner Datei") then
msgbox "Datei existiert schon",vbExclamation
end if

Och nö....
Ich bin jetzt endgültig raus hier.
Viel Erfolg noch
Gruß jodel
fso.FileExists("S:\ARCHIV\Mittelvergabe\Memos\")
Da muss der Dateipfad (inkl. Dateiname drin stehen ....) . Warum heißt die Funktion wohl FileExists ?! Ich glaube es wäre besser wenn du das jemanden machen lässt der was davon versteht ...Ich bin jetzt endgültig raus hier.
Viel Erfolg noch
Gruß jodel

Ein
Löst dein Problem mit dem überschreiben ...
kill "C:\deinedatei.doc"