Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

01 Mar 2018, 07:17

Hallo,

gibt es eine halbwegs übersichtliche und einfache Methode um daten direkt aus einer Excel-Datei auszulesen bzw. reinzuschreiben, ohne sie in Excel zu öffnen und ohne dem Umweg über CSV?

ich möchte mit meinem Script eine Excel-Tabelle erstellen, die auch ein Stückweit formatierung beinhaltet.
BoBo
Posts: 2515
Joined: 13 May 2014, 17:15

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

01 Mar 2018, 08:21

Ja gibt es. Dabei wird Excel als objektinstanz 'angesprochen', muß dafür jedoch nicht sichtbar sein (kann es aber, z.b. zum testen). Quasi objectkommandozeilengedöns.
https://www.google.de/search?q=site:autohotkey.com+ComObjCreate("Excel.Application")
... oder gleich auf deutsch ein einzelnes beispiel:
https://autohotkey.com/board/topic/9000 ... -bedienen/

Wohl bekomms :mrgreen:
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

01 Mar 2018, 09:07

ok, das habe ich auch schon gefunden. Das scheint dann wohl das einfachste zu sein. Ich hatte gehofft, wenn man die Datei mit einem Speziellen zeichensatz oder was weiß ich öffnet erscheint sie in einer Art HTML-Code oder sowas. Aber Pustekuchen.
BoBo
Posts: 2515
Joined: 13 May 2014, 17:15

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

02 Mar 2018, 01:04

Folllast wrote:ok, das habe ich auch schon gefunden. Das scheint dann wohl das einfachste zu sein. Ich hatte gehofft, wenn man die Datei mit einem Speziellen zeichensatz oder was weiß ich öffnet erscheint sie in einer Art HTML-Code oder sowas. Aber Pustekuchen.

Ob das jetzt einfacher zu handhaben wäre ...? :wtf:
Excel 2007 files (e.g., ".xlsx", ".xlsm") are in an XML format. If you change the file extension (i.e., "xlsx", "xlsm") to ".zip", you can unzip the Excel file and look at its components.
http://www.jkp-ads.com/articles/Excel2007FileFormat.asp
User avatar
nnnik
Posts: 3227
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

02 Mar 2018, 02:08

Ich würde nicht sagen, dass eine HTML Datei einfacher zu handhaben ist als ein spezielles Objekt welches für Excel gedacht ist.
Recommends AHK Studio
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

05 Mar 2018, 08:32

Ich versuche es jetzt mit den COM-Objekten. Das klappt auch ganz gut, obwohl ich keine richtige Dokumentation finde was Methoden etc sind und wie man Werte übergibt.

mit dem Befehl "ComExcel.Workbooks.Open(pfadcheckliste)" öffne ich die Datei, deren Link in der Variable "Checkliste" gespeichert ist.
mit dem Befehl "ComExcel.Workbooks.Close(false)" möchte ich das Excel fenster schließen, und mit dem Parameter "false" möchte ich das Fenster "Möchten sie die datei Speichern" verhindern bzw. verneinen.
Allerdings funktioniert das nicht, weil "Error: 0x8002000E - Unzulässige Parameteranzahl beim befehl "Close.
Lt. Dokumentation gibt es drei Parameter (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._workbook.close.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1) aber ich weiß nicht wie ich sie übergeben soll. Folgende Möglichkeiten bei den Parametern habe ich versucht:
(false)
(False)
("False")
("False",,)
(False,,)
("false", , )
(false, , )

keiner hat funktioniert.
BoBo
Posts: 2515
Joined: 13 May 2014, 17:15

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

05 Mar 2018, 10:02

Was ich soweit gesehen habe, wird dies (auch?) über den parameter 1/-1 getriggert.
oWorkbook.Close(1) ; save changes and close Workbook
just me
Posts: 5459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

05 Mar 2018, 10:30

Moin,

die von Dir verlinkte Doku bezieht sich auf ein Workbook Objekt.

Dein Code

Code: [Select all] [Download] GeSHi © Codebox Plus

ComExcel.Workbooks.Close(false)
benutzt aber die Workbooks Collection. Die hat zu meinem Erstaunen auch eine Close Methode, allerdings ohne Parameter.

Das aktive Workbook solltest Du mit

Code: [Select all] [Download] GeSHi © Codebox Plus

ComExcel.Application.ActiveWorkbook.Close(0)
(evtl. auch ohne Application) schließen können, ohne es zu speichern. Ich kann das aber nicht testen.
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 00:00

Hallo,

das hat sehr gut geklappt! Die Arbeitsmappe wurde geschlossen, allerdings war das leere, graue Excel-Fenster noch offen. Das ging erst zu, nachdem ich die AHK-Datei in der Taskleiste geschlossen habe.
Alternativ kann man es mit dem Befehl ComExcel.Application.Quit schließen.

Geh ich recht in der Annahme, dass die COM-Befehle immer auf eine "Bestätigung" vom zu steuernden Programm warten, also erst dann zur nächsten Zeile springen, wenn der letzte Befehl "verarbeitet" wurde?

Wie gesagt, es gibt keine richtige Einführung in das Thema.
just me
Posts: 5459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 03:50

Moin,

Folllast wrote:Geh ich recht in der Annahme, dass die COM-Befehle immer auf eine "Bestätigung" vom zu steuernden Programm warten, also erst dann zur nächsten Zeile springen, wenn der letzte Befehl "verarbeitet" wurde?
Korrekt! Genau genommen muss es allerdings heißen: "wenn der letzte Befehl ein Ergebnis zurückgegeben hat". ;)
User avatar
nnnik
Posts: 3227
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 05:07

Aber es hängt auch vom Programm/Interface ab mit dem du arbeitest.
Zum Beispiel wird der Internet Explorer lange zu deinem Programm zurück springen bevor er mit Navigieren fertig ist.
Es ist immer gut zu wissen ob etwas synchron oder asynchron funktioniert.
Recommends AHK Studio
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 05:56

Ich hab das nächste Problem:

bei der folgenden Zeile
ComExcel.Workbooks.Open(clipboard) funktioniert nicht, wenn clipboard = \\xxxx\Automation\xxxBestellungen\xxxImport\Archiv\xxxxx\2018\EB18-xxx\400_Stuecklistexxxxxx.xlsx ist.
Es kommt die folgende Fehlermeldung.

excelfehler2.JPG
excelfehler2.JPG (119.76 KiB) Viewed 408 times


excelfehler1.JPG
(42.84 KiB) Not downloaded yet

Liegt es daran, dass es kein "Absoluter" Pfad (also D:\ etc. als "Ziel" hat? oder ist er zu lang?

in dem Codebeispiel habe ich die Variable nochmal "manuell" in die Zwischenablage geschrieben, allerdings hat das nichts verändert.
Sowohl über den Explorer als auch über Excel -> Öffnen kann ich die Datei öffnen. Nur über com geht es nicht.
User avatar
nnnik
Posts: 3227
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 06:27

Hmm der doppel \\ am Anfang ist mir spanisch aber ansonsten siehts okay aus.
Recommends AHK Studio
BoBo
Posts: 2515
Joined: 13 May 2014, 17:15

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 07:24

nnnik wrote:Hmm der doppel \\ am Anfang ist mir spanisch aber ansonsten siehts okay aus.
UNC path?
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 07:28

Ich vermute es hängt wieder mit der Codierung zusammen. Ich habe eine andere Datei (Pfad) mit ü im Name versucht, bei der kam der selbe Fehler. Wieder eine andere, ohne Ü und ohne Sonderzeichen, hat aber funktioniert. Wie krieg ich es hin, das AHK das ü und alles andere was so in dem Link vorkommen kann richtig verarbeitet? in der MsgBox hat es die Buchstaben einfach weggelassen.

UPDATE: es liegt wirklich an einem "kaputten" Zeichen. Ein Ordner hört mit einem komische Zeichen auf. Windows zeigt das nur als leerzeichen an, wenn ich die datei aber mit COM öffnen möchte, übergibt es wahrscheinlich das falsche Zeichen. Ich habe es jetzt manuel in dem Link gelöscht, dann ging es. Allerdings nicht, wenn AHK wie geplant, den Link aus einem Fenster ausliest. Es scheint also doch an der Codierung zu liegen.

Beeinflusst "FileEncoding" auch allgemeine Variablen, die ausgelesen werden, oder nur die Befehle FileRead, FileReadLine, Loop Read, FileAppend und FileOpen.
just me
Posts: 5459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 10:28

Moin,

wenn es um Kodierungsprobleme geht, kann die verwendete AHK-Version (ANSI / Unicode) entscheidend sein. Was benutzt Du?

Außerdem wäre es hilfreich, wenn Du näher beschreibst, wie und woher Du den Namen der xlsx-Datei kopierst.

Wenn Du den Namen fest im Skript einträgst, spielt auch noch die Kodierung der Skript-Datei eine Rolle. Man ist in der Regel auf der sicheren Seite, wenn man das Skript als "UTF-8 mit BOM" speichert.
Folllast
Posts: 68
Joined: 24 Jan 2018, 04:57

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

06 Mar 2018, 23:57

der Script ist UTF-8. Ich verwende die aktuelle Unicode-Version (gestern geupdatet).
der Link ist in einer Tabelle eingetragen und wird mit STRG+C in die zwischenablage kopiert.
just me
Posts: 5459
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Excel-Datei (xls oder xlsx) verstehen, auslesen & schreiben

07 Mar 2018, 03:40

Wenn da immer genau ein überflüssiges Zeichen angefügt ist, sollte das funktionieren, nachdem Du den Pfad ins Clipboard kopiert hast:

Code: [Select all] [Download] GeSHi © Codebox Plus

ExcelFile := SubStr(Clipboard, 1, -1)
ComExcel.Workbooks.Open(ExcelFile)

Ansonsten müsste man mal schauen, was da am Ende steht:

Code: [Select all] [Download] GeSHi © Codebox Plus

ExcelFile := Clipboard
Hex := ""
Loop, Parse, ExcelFile
Hex .= Format("{:04X}", Asc(A_LoopField)) . " "
MsgBox, 0, Hex, %Hex%
Man kann dann Zeichen gezielt mit RTrim() entfernen.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 1 guest