Texte per Autoit-Script an ein Word-Dokument anhängen
-
imebro -
18. September 2015 um 09:22 -
Erledigt
-
-
-
...ok und danke.
Aber wird dann nicht alles (auch der Memo-Text) komplett in Fettschrift formatiert?
Wohin müßte denn dieser Zusatz ($oRange.Bold = True) im Code?Habe ihn jetzt einfach über die Zeile "$oRange.InsertAfter($sNumber)" gesetzt, aber in einem anschließenden Text blieb die Nummer und der Name normal (also nicht fett)
LG
imebro -
Ganz einfach nach den Zeilen wo Du die Auftragsnummer und den Namen einfügst.
Die Methode "InsertAfter" erweitert den Range um den eingefügten Text. -
...wie befürchtet, wird jetzt auch der Text aus dem Memo komplett in FETT formatiert.
LG
imebro -
Dann mach es doch wie bei Nummer/Name und setze Bold auf False.
-
...manchmal kann das Leben so einfach sein
Das war´s
Danke und Gruss,
imebro -
-
Hallo wieder mal...
Die Kollegen sind mit dem kleinen Progrämmchen sehr zufrieden
--> Aber folgende Dinge sollten noch möglich sein:
1) Nummer ins bestehende Nummernfeld eintragen und dann auf Button "Memo öffnen" klicken, um ein bestehendes Word-Dokument zu öffnen
Zum eigentlichen öffnen habe ich schon folgenden Code gefunden: ShellExecute ("C:\pfadzurdatei\datei.doc") ; Word-Dokument öffnen
Aber wie mache ich das über einen Button... z.B. "Memo öffnen"? Das müßte ja dann einfach über "$sTempPath" möglich sein...2) Auf einen Button "Memo drucken" klicken, um das geschriebene Memo zu drucken
3) Wenn das Script geöffnet wird, soll im Memo-Feld immer ein bestimmter Text stehen
4) Es sollte auch möglich sein, den geschriebenen Text im Momo-Feld zu formatieren (Fett, kursiv, Aufzählungen)
--> Meine Vermutung:
Ggf. könnte es einfacher sein, anstatt das Memo-Feld (das große Textfeld) zu nutzen, einfach ein bestimmtes Word-Dokument zu öffnen (Vorlage.doc), welches schon den Text enthält, der ja immer erscheinen soll.
Dann könnte man auch formatieren und ggf. über ein VBA-Script das Memo speichern und drucken.Das könnte so aussehen:
Man hätte oben ein Programmfenster mit der Möglichkeit, Nummer + Name einzugeben --> zum neu anlegen und öffnen eines Word-Dokumentes.
Daneben müßte ein Button "Memo erstellen" (wodurch dann die Word-Vorlage geöffnet wird) und ein Button zum öffnen eines erstellten Dokumentes (über Eingabe der Nummer ins obere Feld).Darunter dann nur noch die beiden Buttons zum speichern und drucken des neu erstellten Word-Dokumentes.
Wie wäre Dein/Euer Vorschlag?
Danke und Gruss,
imebro -
Habe schon mal so angefangen:
1) Den Button "Memo öffnen" erstellt
AutoItGlobal $idOpen = GUICtrlCreateButton("Memo öffnen", 290, 30, 100, 25) ; Abstand von li, oben, Breite, Höhe
Der erscheint auch...
2) Diesem Button zugewiesen, dass er die Nummer aus dem Nummernfeld ausliest und dieses Dokument dann öffnet
AutoIt
Alles anzeigenWhile 1 $nMsg = GUIGetMsg() Switch $nMsg Case $idOpen $sNumber = StringStripWS(GUICtrlRead($idNumber), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING, $STR_STRIPSPACES)) ; Liest Nummer aus Inputfeld $idNumber und entfernt alle unnötigen Leerzeichen If $sNumber = "" Then _Write_ErrorMsg("Antragsnummer + Name darf nicht leer sein!", $COLOR_RED) ; Fehlermeldung rot markieren Else ShellExecute ($sTempPath) ; bereits erstelltes Dokument öffnen GUICtrlSetData($idNumber, "") ; Antragsnummer/Name leeren EndIf EndSwitch
Allerdings ist der Code offenbar falsch... aber den habe ich auch aus dem jetzigen und Teilen aus anderen Threads zusammen gefrickeltLG
imebro -
Hab's etwas angepasst.
- Größere Schrift
- Memofeld kann vorbelegt werden
- Fehlermeldungen in fett
- 3 neue Buttons:
- Alle Memos auflisten. nach Doppelklick wird das Dokument geäöffent
- Memo mit eingegebenem Namen öffnen
- Memo mit eingegebenem Namend rucken (hier fehlt noch ein schönes Icon)
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> #include <Word.au3> #include <ColorConstants.au3> #include <GuiButton.au3> #NoTrayIcon Global $sNumber, $sMemo, $oWord, $oDoc Global $sMemoTemplate = "Dies ist der Standardtext" & @CRLF & "für das Memo!" Global $sSavePath = "C:\temp\" ; Pfad zum Speicher der Dokumente $oWord = _Word_Create(False) $hGUI = GUICreate("Neues MEMO schreiben", 492, 730, 830, 78) GUICtrlCreateLabel("Bitte Antragsnummer + Namen eingeben:", 20, 10, 244, 17) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idNumber = GUICtrlCreateInput("", 20, 30, 250, 21) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idErrorText = GUICtrlCreateLabel("", 20, 60, 450, 17) GUICtrlSetFont(-1, 10, 900, 0, "Arial") GUICtrlCreateLabel("Bitte Memo-Text eingeben:", 20, 97, 200, 17) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idMemo = GUICtrlCreateEdit($sMemoTemplate, 20, 117, 450, 568) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idBtnSave = GUICtrlCreateButton("Memo speichern", 20, 692, 100, 25) $idBtnSearch = GUICtrlCreateButton("", 280, 30, 21, 21, $BS_ICON ) _GUICtrlButton_SetImage(-1, "shell32.dll", 22, False) GUICtrlSetTip(-1, "Alle vorhandenen Memos suchen") $idBtnOpen = GUICtrlCreateButton("", 312, 30, 21, 21, $BS_ICON ) _GUICtrlButton_SetImage(-1, "C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE", 1, False) GUICtrlSetTip(-1, "Angegebenes Memo mit Word öffnen") $idBtnPrint = GUICtrlCreateButton("Pr", 344, 30, 21, 21, $BS_ICON ) _GUICtrlButton_SetImage(-1, "C:\Windows\system32\compstui.dll", 64020, False) GUICtrlSetTip(-1, "Angegebenes Memo auf Standarddrucker ausgeben") $idBtnExit = GUICtrlCreateButton("Programmende", 370, 692, 100, 25) ;--------- GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $idBtnExit _Word_Quit($oWord) Exit Case $idBtnSave $sNumber = StringStripWS(GUICtrlRead($idNumber), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING, $STR_STRIPSPACES)) ; Liest Nummer aus Inputfeld $idNumber und entfernt alle unnötigen Leerzeichen $sMemo = GUICtrlRead($idMemo) ; Liest Memo If $sNumber = "" Then _Write_ErrorMsg("Antragsnummer darf nicht leer sein!", $COLOR_RED) ; Fehlermeldung rot markieren ElseIf $sMemo = "" Then _Write_ErrorMsg("Memo darf nicht leer sein!", $COLOR_RED) ; Fehlermeldung rot markieren Else _Save_to_Word() GUICtrlSetData($idNumber, "") ; Auftragsnummer/Name leeren ; GUICtrlSetData($idMemo, "") ; Memo leeren EndIf Case $idBtnSearch $sResult = FileOpenDialog("Bitte anzuzeigende Datei auswählen", $sSavePath, "Word (*.doc)") If $sResult <> "" Then ShellExecuteWait($sResult) EndIf Case $idBtnOpen $sNumber = StringStripWS(GUICtrlRead($idNumber), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING, $STR_STRIPSPACES)) ShellExecuteWait($sSavePath & "\" & $sNumber & ".doc") If @error Then _Write_ErrorMsg("Angegebenes Memo wurde nicht gefunden!", $COLOR_RED) Case $idBtnPrint $sNumber = StringStripWS(GUICtrlRead($idNumber), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING, $STR_STRIPSPACES)) ShellExecuteWait($sSavePath & "\" & $sNumber & ".doc", "", "", "print") If @error Then _Write_ErrorMsg("Angegebenes Memo wurde nicht gefunden!", $COLOR_RED) Else _Write_ErrorMsg("Memo '" & $sNumber & ".doc" & "' erfolgreich auf dem Standarddrucker ausgegeben!", $COLOR_BLUE) Endif EndSwitch WEnd Func _Save_to_Word() $oDoc = _Word_DocAdd($oWord) Local $oRange = _Word_DocRangeSet($oDoc, -2) $oRange.InsertAfter($sNumber) ; Auftragsnummer und Name einfügen $oRange = _Word_DocRangeSet($oDoc, -2) $oRange.InsertBreak($wdLineBreak) ; Zeilenschaltung einfügen $oRange = _Word_DocRangeSet($oDoc, -2) $oRange.InsertAfter($sMemo) ; Zeilenschaltung einfügen Local $sTempPath = $sSavePath & $sNumber & ".doc" If FileExists($sTempPath) Then If MsgBox(BitOR($MB_YESNO, $MB_ICONQUESTION), "Datei existiert bereits", "Die Datei '" & $sTempPath & " existiert bereits!" & @CRLF & "Soll sie überschrieben werden?") = $IDYES Then FileDelete($sTempPath) _Save_Doc($sTempPath) Else _Write_ErrorMsg("Memo wurde nicht gespeichert!", $COLOR_RED) ; Fehlermeldung rot markieren EndIf Else _Save_Doc($sTempPath) EndIf EndFunc ;==>_Save_to_Word Func _Save_Doc($sPathParm) _Word_DocSaveAs($oDoc, $sPathParm) If @error Then _Write_ErrorMsg("Memo konnte NICHT gespeichert werden! Fehler " & @error & " aufgetreten!", $COLOR_RED) Else _Word_DocClose($oDoc) _Write_ErrorMsg("Memo wurde erfolgreich als '" & $sPathParm & "' gespeichert!", $COLOR_BLUE) EndIf EndFunc ;==>_Save_Doc Func _Clear_ErrorMsg() GUICtrlSetData($idErrorText, "") GUICtrlSetColor($idErrorText, $Color_BLACK) AdlibUnRegister("_Clear_ErrorMsg") EndFunc ;==>_Clear_ErrorMsg Func _Write_ErrorMsg($sTextparam, $iColorparam) GUICtrlSetData($idErrorText, $sTextparam) GUICtrlSetColor($idErrorText, $iColorparam) ; Farbe setzen AdlibRegister("_Clear_ErrorMsg", 5000) EndFunc ;==>_Write_ErrorMsg
-
Hallo "water"...
Das ist ja der Wahnsinn.
Hab nicht gedacht, dass es so möglich istHabe jetzt auch die Pfade zu den Dokumenten und zu Winword angepaßt und es funktioniert bestens.
Den vorbelegten Text im Memofeld müßte ich nun ändern in eine Aufzählung, die insgesamt 13 Punkte enthält mit jeweils 2 Leerzeilen dazwischen.
Und jeder dieser Punkte (aber NICHT die Leerzeilen) müßten in FETT formatiert sein.Muss ich nun all diese Punkte in die Code-Zeile 9 hintereinander schreiben... mit jeweils mehreren "@CRLF" als Zeilenschaltung?
Oder gibt es da ne andere Möglichkeit?Ich habe im Forum recherchiert und einen Hinweis darauf gefunden, dass man in einer TextBox nur unformatierten Text verwenden kann.
Formatierten Text kann man offenbar nur in einer RichTextBox darstellen. Aber vielleicht gilt das auch nur für VBA-Code. Vielleicht gibt es sowas ja auch für Autoit... (vielleicht "RichEdit"?).
Wäre das ggf. eine Lösung?
Habe jedoch bisher noch nichts gefunden bei meiner Recherche.Danke und Gruss,
imebro -
Den vorbelegten Text kannst Du genau wie von Dir beschrieben einbauen.
Was eine komplette Systemänderung bedeuten würde ist die Formatierung. Deine Ausage mit EditBox und RichTextBox ist korrekt.
Da gibt es eine UDF dafür, das wird aber komplexer.
Ich schau mir das mal an. -
Das wird sehr viel komplexer.
Ich empfehle eher, das Memo-Feld durch einen Aufruf von Word zu ersetzen. Da lässt sich ein Template übergeben und wenn das Dokument gesichert oder Word beendet wurde, dann läuft das Skript weiter. -
OK... gute Idee.
Ich habe schon eine Vorlage "Vorlage_Memo.doc" in Word erstellt.
Diese sollte dann vom Script aufgerufen werden. Diese enthält dann schon die in fett formatierten Aufzählungen.
Dann können die Sachbearbeiter sofort loslegen.Könnte man denn dann die Buttons "Memo speichern / Memo suchen / Memo drucken" des Scriptes nutzen oder müßte ich dazu VBA-Makros in Word erstellen?
Wenn man die Buttons des Scriptes weiter nutzen kann... brauche ich dann nur einen Aufruf für Word --> "Vorlage_Memo.doc" ins Script einbauen?
Danke und Gruss,
imebro -
Zwei Fragen würde ich vorab klären:
- Wären die Benutzer zufrieden mit der gemischten Oberfläche aus GUI und Word?
- Falls Du alles in VBA machen möchtest: Ist ausreichend Know How vorhanden? Sprich Buttons und EIngabefelder in VBA erstellen
-
Hallo und danke...
Ich habe jetzt einfach mal die entsprechenden Buttons per VBA programmiert.
Damit funktioniert es auch und daher denke ich, dass der zusätzliche Aufwand sich nicht lohnen würde, es jetzt auch über Autoit zu programmieren.Wir testen das so jetzt mal und schauen mal
Das Autoit-Script kann ich dennoch sicher für andere Anwendungen nutzen als Grundlage.
Danke Dir bis dahin für Deine super Hilfe!!
LG
imebro -
-