Excel mit AHK Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Excel mit AHK

23 Apr 2018, 10:56

Hallo,

folgendes Problem:

Ich möchte in einer bereits bestehende Excel Datei nach einer Zeichenkette suchen und dann in der jeweiligen Zeile eine Zelle kopieren und später in einem anderen Programm wieder einfügen. In dieser Excel Datei sind über 4000 Sachen mit entsprechenden Daten zu jeder Sache in der entsprechenden Zeile.

Aktuell löse ich mein Problem so ungefähr:

Code: Select all


Run G:\xxxxx\2019.xls

sleep 1000
Send ^f 

sleep 1000

Send Gs%az%

sleep 500

send {enter}

sleep 1000

Send {Esc}

sleep 1000

Send {right}{right}{right}Ste{right}%Datum%{right}

;hier muss eine Zelle kopiert werden (und später in einem anderen word dok an einer bestimmten Stelle einfügen) 

Click 52, 15

sleep 500

WinClose 2019.xls

Ich bin noch am Anfang von ahk und lerne gerne neues dazu. Ich hoffe ihr könnt mir helfen.
Mir wurde schon gesagt, dass VB evtl. praktischer wäre als ahk, aber ich muss auch in MS fremde Programme damit.

Daaaankeeeee

Maglo
Folllast
Posts: 79
Joined: 24 Jan 2018, 04:57

Re: Excel mit AHK

24 Apr 2018, 03:30

Ich habe mal den Code kommentiert, damit ich nachvollziehen kann was passiert. Wenn die kommentare stimmen, bestätige mir das kurz :D

Code: Select all

		
Run G:\xxxxx\2019.xls							; öffnet die Excel-Datei
sleep 1000										; wartet eine Sekunde
Send ^f 										; öffnet das Suchen-Fenster
sleep 1000										; wartet eine Sekunde
Send Gs%az%									; gibt Gs%az% in das Suchfeld ein
sleep 500										; wartet eine halbe
send {enter}									; enter
sleep 1000										;warten
Send {Esc}										; schließt das fenster
sleep 1000										; warten
Send {right}{right}{right}Ste{right}%Datum%{right}		; springt drei zellen nach rechts, gibt "ste" ein, springt noch eine nach rechts, gibt das Datum ein, springt noch eine nach rechts
											; hier muss eine Zelle kopiert werden (und später in einem anderen word dok an einer bestimmten Stelle einfügen) 
Click 52, 15									; klickt irgendwohin(Wohin genau)
sleep 500										; wartet wieder
WinClose 2019.xls								; schließt excel
Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Re: Excel mit AHK

24 Apr 2018, 03:47

Genau alles richtig

Der click klickt auf das speichern Symbol oben in der schnellleiste

Danke schon einmal
Folllast
Posts: 79
Joined: 24 Jan 2018, 04:57

Re: Excel mit AHK

24 Apr 2018, 03:51

Maglo wrote:Der click klickt auf das speichern Symbol oben in der taskleiste.
würde ich mit send, ^s machen. ist ein bisschen sicherer, falls sich das Fenster mal verschiebt oder so (Excel macht ja manchmal komische sachen).

in deinem Beispiel kannst du ja dann mit send, ^c die Zelle kopieren. Der Inhalt ist dann in der Variable Clipboard gespeichert und kann weiter verarbeitet werden.
Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Re: Excel mit AHK

24 Apr 2018, 04:56

ok danke, meine Zwischenfrage hatte sich auch erledigt.

Weiteres Problem, was hier allerdings nicht auftaucht. (will nicht unbedingt für sowas kleines ein neuen Theard aufmachen)

Ich will eine Word-Datei öffnen, bearbeiten, 3x drucken und schließen ohne das gespeichert wird. Mit Strg + w kann man das schließen, aber nicht ohne dem Bestätigungsfenster. Mein Problem hierbei ist nur das problemlose nicht-speichern und schließen.
Idee?
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK  Topic is solved

24 Apr 2018, 06:42

Hallo Maglo,

ich würde mit COM-Objekt arbeiten:

Code: Select all

Excel     := ComObjActive("Excel.Application")		; aktuell laufende Excel Instanz
WorkBook  := Excel.ActiveWorkbook					; aktuell geöffnete Datei
Sheet     := Excel.ActiveSheet						; aktuell geöffnete Tabelle

Suchbegriff:= "Test"
FormatTime, Heute, A_now, dd.MM.yyyy
Adresse := Excel.Range("A:A").Find(Suchbegriff).address
	If Adresse
	{
		clipboard =
		Excel.Range(Adresse).offset(0,3).value := "ste"
		Excel.Range(Adresse).offset(0,4).value := Heute
		Excel.Range(Adresse).offset(0,5).copy
		ExcelZellKopie := Clipboard
		Excel.CutCopyMode := False
	}
	Else
		MsgBox, Suchbegriff nicht gefunden.

MsgBox, % ExcelZellKopie
Damit sprichst du Excel und die Zellen direkt an, ohne Gefahr zu laufen, dass irgendein Meldungsfenster dir in deine Tasten-Aufrufe haut.

Viele Erfolg - Lucky Joe
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

24 Apr 2018, 06:48

... ach ja: das COM-Objekt eignet sich natürlich auch für die Arbeit mit Word (Word öffnen, schließen, drucken). Dazu müsstest du aber etwas genauer werden, was du mit "Bearbeiten" meinst: manuell oder auch programmgesteuert?

Lucky Joe
Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Re: Excel mit AHK

24 Apr 2018, 08:03

Ich verstehe die com-objekte nicht ganz. https://autohotkey.com/board/topic/5698 ... ntry381256

Dort stehen ein paar Befehle unter Excel bzw. Word, aber ich finde keine Liste wo alle Befehle stehen. Z. B. wo finde ich wie man eine bestimmte Excel Datei öffnet?
LuckyJoe wrote:... ach ja: das COM-Objekt eignet sich natürlich auch für die Arbeit mit Word (Word öffnen, schließen, drucken). Dazu müsstest du aber etwas genauer werden, was du mit "Bearbeiten" meinst: manuell oder auch programmgesteuert?

Lucky Joe

programmgesteuert. Hier ein Bsp:
Spoiler
Mit F11 komm ich in Word zu den Ansprungmarken, die vordefiniert im Formular sind.

Und danke für den Code :) Ich fühl mich so dumm.
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

24 Apr 2018, 09:07

Hi,

Excel-Datei öffnen: Excel.Workbooks.Open("D:\Test.xlsm").
COM ist hier sehr gut erklärt, oder auch hier.

Wenn du in Word mit "Ansprungmarken" arbeitest, kannst du dann nicht auch mit Feldern arbeiten und die Serienbrieffunktion nutzen? Damit kannst du doch Excel als Quelle benutzen.

Ansonsten als Anregung zu Word (ungetestet):

Code: Select all

DocumentPath := "C:\MyDocument.docx"   ; example
BookmarkName := "MyBookmark"   ; example

oWord := ComObjCreate("Word.Application")
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName).Select
oDoc..Bookmarks(BookmarkName).Range.Text := "Abc123"
Viel Erfolg - Lucky Joe
Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Re: Excel mit AHK

24 Apr 2018, 09:59

Maglo wrote: Ich will eine Word-Datei öffnen, bearbeiten, 3x drucken und schließen ohne das gespeichert wird. Mit Strg + w bzw. besser Alt+F4 kann man das schließen, aber nicht ohne dem Bestätigungsfenster. Mein Problem hierbei ist nur das problemlose nicht-speichern und schließen.
Idee?
Wow danke, hat mir echt krass weitergeholfen. Da kann ich eben alles überarbeiten, aber macht ja Spaß.
Kannst du mir noch obige Frage beantworten?

und:

Code: Select all

oword.ActiveDocument.PrintOut.Copies:=3
Ich will das Dokument 3x ausdrucken. Wo ist mein Fehler?
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

24 Apr 2018, 11:02

Hi Maglo, habe heute Abend leider keine Zeit mehr - vielleicht morgen, wenn du nicht alleine weiterkommst.
VG - Lucky Joe
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

25 Apr 2018, 02:50

... so, zu den letzten Fragen:

Eine Word-Datei schließt du ohne zu speichern mit oWord.ActiveDocument.Close(0).
Möchtest du sie unter einem bestimmten Namen speichern: oWord.ActiveDocument.SaveAs("d:\xxx\MeinWordDokument.doc")
Word beenden: oWord.Quit()
Zum mehrmaligen Ausdrucken musst du bestimmte Parameter in einer bestimmten Reihenfolge "überspringen": oWord.ActiveDocument.PrintOut( , , , , , , , Copies := 3)

Viel Erfolg - Lucky Joe
effel
Posts: 104
Joined: 16 Jan 2018, 13:34

Re: Excel mit AHK

25 Apr 2018, 03:29

LuckyJoe wrote:Hallo Maglo,

ich würde mit COM-Objekt arbeiten:

Code: Select all

Excel     := ComObjActive("Excel.Application")		; aktuell laufende Excel Instanz
WorkBook  := Excel.ActiveWorkbook					; aktuell geöffnete Datei
Sheet     := Excel.ActiveSheet						; aktuell geöffnete Tabelle

Suchbegriff:= "Test"
FormatTime, Heute, A_now, dd.MM.yyyy
Adresse := Excel.Range("A:A").Find(Suchbegriff).address
	If Adresse
	{
		clipboard =
		Excel.Range(Adresse).offset(0,3).value := "ste"
		Excel.Range(Adresse).offset(0,4).value := Heute
		Excel.Range(Adresse).offset(0,5).copy
		ExcelZellKopie := Clipboard
		Excel.CutCopyMode := False
	}
	Else
		MsgBox, Suchbegriff nicht gefunden.

MsgBox, % ExcelZellKopie
Damit sprichst du Excel und die Zellen direkt an, ohne Gefahr zu laufen, dass irgendein Meldungsfenster dir in deine Tasten-Aufrufe haut.

Viele Erfolg - Lucky Joe
Hi Lucky Joe, sehr interessant, habe gleich damit was experimentiert. hast du einen tip, wie ich mit COM-Objekt ein Foto in die excel datei schreiben kann?, bsp. in die zelle A11
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

25 Apr 2018, 04:30

Hallo effel,

probiere es hiermit:

Code: Select all

Excel := ComObjActive("Excel.Application")		; aktuell laufende Excel Instanz
Excel.ActiveSheet.Pictures.Insert("d:\xxx\MeinFoto.jpg").select   ; ←------ anpassen!
Excel.Selection.ShapeRange.Left := 10
Excel.Selection.ShapeRange.Top := 10
;Excel.Selection.ShapeRange.Height := 100
Viel Erfolg - Lucky Joe
Maglo
Posts: 6
Joined: 23 Apr 2018, 10:43

Re: Excel mit AHK

25 Apr 2018, 07:39

Hey,

hab nun einiges probiert und bin mit meinem Skript fast fertig, allerdings fehlen noch ein paar Sachen:

Kurz was das Skript genau machen soll:

Also das komplette Skript soll zuerst ein bestimmtes Dokument öffnen und an das Ende einen Vermerk schreiben, dieses Dok 3x ausdrucken, speichern, schließen und verschieben
Dann ein bestimmtes Excel Register öffnen, nach einem Begriff suchen und in der Zeile neben dem gefundenen Suchbegriff dann bestimmte Daten eintragen und einen Wert kopieren, speichern und schließen.
Dann 2 weitere verschiedene Dok Formulare öffnen und dort in die Textmarken entsprechende Daten einfügen, die vorher in einer Maske angegeben wurden, diese beiden Formulare ausdrucken, nicht speichern und schließen.
Die Dokumente müssen nicht geöffnet werden (also sichtbar im Bildschirm) Wenn ich am Ende alles ausgedruckt in der Hand halte ist es perfekt.

Mein Entwurf:
Spoiler
Probleme:

Das Excel Register funktioniert nicht. Wenn er das Register öffnet und den Suchbegriff findet, dann soll er in den Zellen daneben die Wörter einsetzen und einmal kopieren. Er schreibt die Sachen allerdings in die 2. Zeile und nicht neben dem gefundenen Suchbegriff.
Bei den Bookmarks fügt er keine Variabeln ein. "%az%" wird als %az% wiedergegeben.
Ansonsten funktioniert alles.

Ich hab gestern 5 Stunden das alles versucht zu verstehen und zusammenzuschreiben, aber hab es nicht ganz geschafft.

Ich küsse dir die Füße Joe.
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

25 Apr 2018, 08:29

Hi Maglo,

bitte schicke mir Musterdateien (ohne persönliche/geschäftliche/behördliche) Daten sowohl von der Excel-Datei als auch von den Word-Dateien. Ansonsten muss ich das hier alles mühsam nachbauen und habe möglicherweise immer noch nicht das, was du haben willst. Dann probiere ich mich gerne noch einmal daran.

Bei den Variablen tippe ich mal darauf, dass du die entweder nicht in "Anführungszeichen" setzen darfst oder die Anführungszeichen "nachbilden" (Chr(34)) musst. Bilde zum Testen von "kombinierten" Variablen am besten eine neue Variable, die du dann verwendest.

VG - Lucky Joe
effel
Posts: 104
Joined: 16 Jan 2018, 13:34

Re: Excel mit AHK

25 Apr 2018, 09:40

LuckyJoe wrote:probiere es hiermit:

Code: Select all

Excel := ComObjActive("Excel.Application")		; aktuell laufende Excel Instanz
Excel.ActiveSheet.Pictures.Insert("d:\xxx\MeinFoto.jpg").select   ; ←------ anpassen!
...
danke dir :-)
das funktioniert toll, das foto ist jedoch nicht an eine bestimmte zelle gebunden, geht das auch? evt. sogar mit der möglichkeit die zelle anzuklicken und dann das foto im original zu öffnen?
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

25 Apr 2018, 10:21

Hi effel,
(sorry an den Rest der Community, wenn es off-topic wird) ;-)

soweit ich weiß, sind Grafiken grundsätzlich Objekte, die nicht "Inhalt" einer Zelle, wohl aber an diese "gebunden" werden können. Dazu die Zelle selbst so groß machen, dass die Grafik hineinpasst (Zeilenhöhe/Spaltenbreite), dann die Grafik (mit Alt-Maus) in die obere linke Ecke der Zelle positionieren. Rechtsklick auf die Grafik - Grafik formatieren - Eigenschaften: von Zellposition und -größe abhängig" anklicken.

Das Öffnen der Grafik bekommst du hin, wenn du in der Zelle einen Hyperlink zu der Grafik in deinem Dateiverzeichnis legst.

Das alles entfernt sich aber etwas von AHK, denn ich würde für Excel-/Word-Programmierung immer noch VBA innerhalb dieser Produkte vorziehen.

Viel Erfolg - Lucky Joe
User avatar
Meister Lampe
Posts: 147
Joined: 06 Apr 2014, 13:28

Re: Excel mit AHK

14 Aug 2019, 16:49

Hallo LuckyJoe!

Entschuldige, daß ich diesen Thread wieder aufgreife, aber er liegt doch zu nahe an einer kleinen Frage, die sich direkt darauf bezieht, als daß ich einen neuen Thread eröffnen wollte.

Du schreibst nämlich unten einen Code, wie man in ein Word-Dokument an vorgegebenen Bookmarks Text einfügen kann.
Ich habe jetzt eine Vorlage mit Word erstellt und formatiert und darin sollten nur noch zwei spezifische Werte bzw. Texte eingegeben werden. Dazu habe ich entsprechend Textfelder gesetzt und in Schrift, Farbe, Größe und Position festgelegt. Wie steuere ich diese an, damit die - über Inputbox oder Gui - eingegebenen - Angaben dann wie vorgesehen dort hineingesetzt werden?
Also wohlbemerkt: Es soll kein neues Word-Dokument erstellt werden, sondern es existiert eine Vorlage, die erhalten bleiben bleiben muß!

Du schreibst auch:
COM ist hier sehr gut erklärt, oder auch hier.
mit Verweisen auf das alte Forum.
Gibt's das auch irgendwo auf Deutsch?

Viele Grüße von Meister Lampe
User avatar
LuckyJoe
Posts: 214
Joined: 02 Oct 2013, 09:52

Re: Excel mit AHK

14 Aug 2019, 17:06

Hallo Meister Lampe,

vorab zum Sprachgebrauch: "Textfelder" sind nicht das gleiche wie "Textmarken". Textmarken (engl. bookmark) fügst du mit "Einfügen - Textmarke - Textmarkenname" da ein, wo du deinen Cursor positioniert hast (z.B. "MyBookmark1"). Um das in Word zu sehen, schaltest du unter "Datei - Optionen - Anzeige - Optionen für die Seitenanzeige - Textmarkerzeichen anzeigen" ein (ist bei mir Office 365, bei Office 2003 liegt das woanders).

In AHK kannst du die Textmarke dann ersetzen mit:

Code: Select all

DocumentPath := "C:\MyDocument.docx"   ; example
BookmarkName := "MyBookmark1"   ; example

oWord := ComObjCreate("Word.Application")
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName).Select
oDoc.Bookmarks(BookmarkName).Range.Text := "Hier wurde MyBookmark1 ersetzt."
Viel Erfolg.
HG - Lucky Joe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 28 guests