# Frage zu: xls Datei mit LcdHype auslesen



## dorow (23. Februar 2014)

Ich möchte mit LcdHype eine xls Datei auslesen. Die xls Datei wird von meiner Fan O Matic Lüftersteuerung erstellt. Die xls Datei wir alle 5 sek. Um eine Spalte ergänzt.
Im LcdHype Forum konnte ich nur in Erfahrung bringen das man die xls Datei in eine text Datei umwandeln soll. Leider kann ich nichts finden und im LcdHype Forum kann Mann sich nicht mehr anmelden.
Ich hoffe das mir hier einer helfen kann.


----------



## mattinator (23. Februar 2014)

Z.B. im OpenOffice / LibreOffice gibt es eine Programmierschnittstelle, mit der man xls-Dateien in s.g. csv-Dateien im Batch-Modus umwandeln kann. Allerdings setzt das einige (VB-)Programmierkenntnisse voraus. Alternativ gibt es auch Perl-Bibliotheken, die Zugriff auf die Blätter, Zeilen und Spalten einer xls-Datei ermöglichen. Aber auch da sind Programmierkenntnisse, in diesem Fall in Perl erforderlich. Voraussetzung für ein solches Programm ist jedoch die genaue Kenntnis des Aufbaus der xls-Dateien von der Fan O Matic und der für LcdHype erforderlichen Text-Dateien.


----------



## dorow (24. Februar 2014)

Das hört sich ja nicht gut für mich an. Da ich keine Programmier Kenntnisse habe werde ich da wohl nicht allein weiter kommen.

Vielleicht kann mir ja hier einer weiter helfen? 

Hier einige dinge die ich in Erfahrung bringen konnte: Link zum LCDHype Forum

Auf dem Bild kann man sehen welche Werte / Sensoren ich auslesen möchte.


----------



## Rho (24. Februar 2014)

Funktioniert das Programm (xls2csv) in dem von dir verlinkten Thread nicht?
Ansonsten wäre es noch hilfreich mal je eine Beispieldatei für Input (xls) und Output (Text) zu haben.


----------



## dorow (24. Februar 2014)

Rho schrieb:


> Funktioniert das Programm (xls2csv) in dem von dir verlinkten Thread nicht?
> Ansonsten wäre es noch hilfreich mal je eine Beispieldatei für Input (xls) und Output (Text) zu haben.



Leider geht das Programm xls2csv bei mir nicht, ist ein 32bit Programm ich habe 64bit.

Was für ein Beispiel Datei bräuchtest du? Ich kann hier keine Datei hochladen.


----------



## Rho (24. Februar 2014)

Na zum einen wäre die konkrete XLS-Datei gut, welche umgewandelt werden soll und zum anderen wäre es interessant zu wissen wie das Ergebnis dieser Umwandlung denn genau aussehen soll.
Dateien hochladen kannst du z.B. bei File-Upload.net - Ihr kostenloser File Hoster!

xls2csv ist übrigens ein 16-bit-Programm. 32-bit  wäre auch unter 64-bit-Versionen von Windows kein Problem.


----------



## dorow (24. Februar 2014)

Hallo hier die xls.Datei die der Fan O Matic erstellt.

https://mega.co.nz/#!mU0T1bYJ!jyZcEJB3mNgwrYOs9SByQ1-QLCDD3Ur2KrQVAOsuH44

Diese Werte / Sensoren möchte ich mit dem Programm LCDHype auslesen.


----------



## XPrototypeX (24. Februar 2014)

So ganz verstehe ich dein Problem nicht. Willst du eine .xls in eine .csv umwandeln?


----------



## dorow (24. Februar 2014)

Ich möchte die xls Informationen mit LCDHype auslesen. Wie genau das geht weiß ich nicht und das ist meine Problem. Ich habe gelesen das man die xls in csv oder eine Text Datei umwandeln muss. Aber wie ich diese Daten dann mit LCDHype auslese weiß ich dann immer noch nicht.
Ich habe da keinen Ansatz / Ahnung. Da hoffe ich auf eure Hilfe.


----------



## DarkMo (24. Februar 2014)

dann wäre der erste ansatz wohl: was muss man diesem lcd ding zu futtern geben? wenn man das ned weis, dann kann man sich doch alle mühe gleich sparen  wenn du weist, software A liefert file 1 und software B braucht file 2, dann is ja klar, dass man 1 in 2 wandeln muss. weis man aber garnich, was 2 nu eigentlich is... ^^


----------



## XPrototypeX (24. Februar 2014)

Sehe das ähnlich wie DarkMo. Woher sollen wir wissen, was LCGHype für ein Dateiformat braucht? Wir können dir helfen wenn du uns sagst: Ich hab Dateiformat X brauch aber Format Y. Allgemein sieht das sehr alt aus gibts da nichts besseres?


----------



## dorow (24. Februar 2014)

LCDHype arbeitet mit Delphi.

Im 3 post ist ein link.

Hier mal ein Auszug:

also aus excel sheet lesen is schwierig da es da wieder x verschiedene versionen gibt. ich würde es per xls2text versuchen in ein textfile umzuwandeln und dann das textfile periodisch per %System.ReadFile() einlesen.


----------



## Rho (24. Februar 2014)

So lange MS Office installiert ist, ist es relativ einfach mit Excel-Tabellen zu arbeiten.

Tabelle öffnen und im CSV-Format speichern in C#: https://gist.github.com/elcattivo/9196787


----------



## dorow (25. Februar 2014)

Rho schrieb:


> So lange MS Office installiert ist, ist es relativ einfach mit Excel-Tabellen zu arbeiten.
> 
> Tabelle öffnen und im CSV-Format speichern in C#: https://gist.github.com/elcattivo/9196787


Ich kann damit leider nichts anfangen. MS Office habe ich installiert. Nur weiß ich nicht wie ich die xls Datei nun umwanden. Des weiteren muss ja die CSV Datei immer alle 5 sek. mit Aktualisiert werden.
Kann mir einer ein Beispiel mit meiner Datei geben?


----------



## Rho (25. Februar 2014)

Hier ist zum Testen mal das kompilierte Programm: https://mega.co.nz/#!1wJwjC6R!v5IdOF_uX4TeaPaoMAL-K3jBDWjIc-CCWfPculpombc


----------



## dorow (25. Februar 2014)

Mal ne dumme Frage: was mach ich mit der exe?


----------



## Rho (25. Februar 2014)

Ich setze jetzt mal vorraus, dass du weißt, was der Kommandozeileninterpreter (CMD) in Windows ist.

Angenommen du befindest dich mit der Kommandozeile im Verzeichnis, in der sich auch die _excel2csv.exe_ befindet, die umzuwandelnde XLS-Datei (z.B. _beispie.xls_) befindet sich ebenfalls im gleichen Verzeichnis und die Ausgabe soll in der Datei _ausgabe.csv_ erfolgen.  Dann rufst du das Programm folgendermaßen auf:

```
excel2csv.exe beispiel.xls ausgabe.csv
```


----------



## dorow (25. Februar 2014)

Ah ok jetzt kommt licht ins Spiel. Werde das Morgen mal testen. Melde mich dann noch mal.
Erstmal danke


----------



## dorow (27. Februar 2014)

Soweit hat erst mal alles funktioniert. Das umwandeln hat ohne Problem geklappt.

Jetzt das aber!

Die erzeugte csv Datei wird ja nicht automatisch alle 5 Sekunden aktualisiert. Desweiteren  kann ich die originale xls Datei nicht so anpassen wie ich das möchte.
Aus diesem Grund werden mir alle Informationen hintereinander im Display angezeigt. Das hilft mir nicht weiter, ich bräuchte z.B. Nur Wert x und y, nicht alle Werte, es sind ja auch nicht alle Sensoren belegt. Diese werden aber mit gespeichert und angezeigt.

Schade, aber danke für eure Hilfe. Werde auch noch mal ein Bild hochladen.


----------



## Rho (27. Februar 2014)

dorow schrieb:


> Soweit hat erst mal alles funktioniert. Das umwandeln hat ohne Problem geklappt.


Immerhin schon mal ein Anfang.



dorow schrieb:


> Die erzeugte csv Datei wird ja nicht automatisch alle 5 Sekunden aktualisiert.


Das zu ändern ist kein Problem.



dorow schrieb:


> ich bräuchte z.B. Nur Wert x und y, nicht alle Werte, es sind ja auch nicht alle Sensoren belegt.


Deshalb wollte ich ja schon mehrfach wissen, wie die Ausgabe der Umwandlung konkret aussehen soll.


----------



## dorow (27. Februar 2014)

Also hier mal ein Bild.

Mich Interessieren nur die 26.6 und 0.93

Die 26.6 ist die Wassertemperatur und 0.93 der Durchfluss. Es werden auch immer die letzten Werte der csv Datei geladen. Das ist auch schon mal gut, da die Werte ja fortlaufen gespeichert werden.

Mich würde jetzt Interessieren wie man die csv Datei automatisch mit Aktualiesiert und die Werte nur angezeigt werden die man benötigt.

Hier meine csv Datei:https://mega.co.nz/#!HZk1XLoa!agfylk6OtGX7ryhVYgLatrweyAg00MzbpmogK-SF-Lc


----------



## Rho (28. Februar 2014)

Du kannst jetzt einfach als zusätzliche Parameter die Spalten übergeben, die übernommen werden sollen. Wenn man z.B. nur die Spalten B und H will, sieht das dann so aus:

```
excel2csv.exe Grafik.xls Grafik.csv B H
```
Download: https://mega.co.nz/#!MxZR1BqL!2yUGs-r9JrwWAXcrt4Gpawfrbpsdr8iVRkVPye0um8U

Die absolut simpelste Möglichkeit um die XLS-Datei alle fünf Sekunden auszulesen wäre ein Batch-Skript, welches das Programm alle fünf Sekunden startet.

*start.bat*

```
@echo off
echo Aktualisiere Werte . . .
:loop
excel2csv.exe Grafik.xls Grafik.csv B H
sleep 5
goto loop
```


----------



## dorow (28. Februar 2014)

Ok , werde das mal testen.
Noch ne Frage zu der Start.bat wie erstelle ich die nochmal?


----------



## DarkMo (28. Februar 2014)

rechtsklick aufn desktop (oder wohin auch immer), neu -> textdokument. krams reinkopieren, speichern und per datei umbenennen (kann man auch F2 drücken) in irgendwas.bat. also auf die endung kommts da an, da sollte man in den ordneroptionen von windoof eingestellt haben, dass man alle endungen sieht. das müsste es an und für sich gewesen sein.


----------



## dorow (28. Februar 2014)

Die Spalten die ich brauche werden jetzt angezeigt. Das klappt ja schon mal.
Die bat Datei habe ich auch erstellt. Aber es kommt ab der zweiten Aktualisierung immer der Fehler das die excel2csv.exe ein Problem hat und beendet wird. Außerdem verbrauch die Umwandlung ganz schön CPU Leistung.


----------



## Rho (28. Februar 2014)

Welches Betriebssystem hast du denn? Der Sleep-Befehl funktioniert erst ab Windows 7. Falls er nicht ausgeführt wird, würde das die hohe CPU-Auslastung und die Fehlermeldungen erklären. Ich baue die Schleife wohl doch besser direkt in das eigentliche Programm ein. Dann sollte nichts mehr schiefgehen.


----------



## dorow (28. Februar 2014)

Ich nutze Windows 7 64bit und einmal windows 8.1 64bit aber unter Windows 8.1läuft die Lüftersteuerung Software noch nicht.

Kann man auch die abstände der Werte verändern?


----------



## Rho (28. Februar 2014)

Was meinst du mit Abstand der Werte?

*Edit:*
Neue Version mit Loop Excel2CSV v1.2.0

Der Aufruf

```
excel2csv.exe -c B,H -l 5 Grafik.xls
```
übernimmt nur die Spalten B und H, speichert die Ausgabe in die Datei Grafik.csv und aktualisiert die Werte alle 5 Sekunden.

Zum Beenden _Strg + C_ drücken.


----------



## dorow (28. Februar 2014)

Ok Danke, werde das testen.
Mit dem Abstand der Werte meine ich, dass jetzt die Werte hintereinander 26.6,0.93 im Display stehen. Ich würde es gerne so anzeigen: Wassertemp.: 26.6 *C   Durchfluss: 0.93 L/min.

Leider kann ich am ipad nicht richtig *C schreiben.

Danke auch für deine super Hilfe erst mal


----------



## Rho (28. Februar 2014)

Naja, machbar wäre es schon. Allerdings halte ich es für sinnvoller, die Ausgabe einfach in LCDHype anzupassen.


----------



## dorow (28. Februar 2014)

Rho schrieb:


> Naja, machbar wäre es schon. Allerdings halte ich es für sinnvoller, die Ausgabe einfach in LCDHype anzupassen.


Ja, aber kann ich die abstände zwischen den Werten selbst verändern? So das ich noch etwas dazwischen schreiben kann.


----------



## Rho (1. März 2014)

Wenn man das Programm entsprechend anpasst, wäre das natürlich möglich. Allerding sehe ich den Sinn dahinter nicht. Meiner Meinung nach ist es besser, die anzuzeigenden Daten in LCDHype selbst zu formatieren.

Mit dem folgenden LCDHype-Skript kannst du das ganz leicht machen. Dabei wird die Letzte Zeile der CSV-Datei eingelesen und in ihre einzelnen Spalten zerlegt. Auf die jeweiligen Spalten kannst du dann über _%Colums(*Index*)_ zugreifen. _Index_ entspricht dabei der Nummer der Spalte minus eins, da der Index null-basiert ist. So müsstest du beim Erzeugen der CSV-Datei nicht mal angeben, welche Spalten du willst, weil du sie im LCDHype-Skript ja ohnehin auswählen kannst.


```
#Header
  %Common.SetPriority(5000)
  %DefList(Columns)
  %DefFunc(LoadData,Local,File=
    %DefVar(Line=%System.ReadFile(%File()))
    %List.Clear(Columns)
    %Loop.While(%String.Pos(',', %Line()) > 0)
    {
      %List.Add(Columns, %String.Copy(%Line(), 1, %Dec(%String.Pos(',', %Line()), 1)))
      %Assign(Line, %String.Copy(%Line(), %Inc(%String.Pos(',', %Line()), 1), %Dec(%String.Length(%Line()), %Inc(%String.Pos(',', %Line()), 1))))
    }
    %List.Add(Columns, %Line())
  )
#EndHeader

#TextMode
  %LoadData('E:\Fan O Matic Grafik\Grafik.csv')

  'Wassertemp.: ' %Columns(0) ' C'
  %Common.CreateNewLine()
  'Durchfluss : ' %Columns(1) ' L/min'
#EndTextMode
```

Das ist übrigens mit Abstand die abartigste Programmiersprache, die ich jemals verwendet habe.


----------



## dorow (1. März 2014)

Teste das nachher gleich mal alles.

In der Version: Excel2CSV v1.2.0 wird ja nur wieder B und H gespeichert. Sollte ich alles über LCDHype selbst wählen können, kannst du mir bitte noch mal eine Version Schreiben wo alle Werte drin sind mit der Loop Funktion?

Teste aber erst mal alles ausgiebig. Werde dann berichten.


----------



## Rho (1. März 2014)

Du kannst auch mit v1.2.0 sämtliche Werte speichern. Du musst einfach nur den c-Parameter weglassen beim Start.


----------



## dorow (2. März 2014)

Leider gibt es immer Probleme mit dem Programm. Bekomme immer noch eine Fehlermeldung, siehe Bild.
Ich denke das sich das Programm mit dem Fan-O-Matic Grafik Programm behakt.


----------



## Rho (2. März 2014)

Versuchs mal damit: Excel2CSV v1.2.1


----------



## dorow (2. März 2014)

Es läuft ein paar Sekunden dann kommt das.


----------



## Rho (2. März 2014)

Nächster Versuch: Excel2CSV v1.2.2


----------



## dorow (3. März 2014)

Die ersten Test waren bis jetzt alle ohne Fehler. 

Habe auch das Sript für LCDHype überarbeitet und getestet. Dort läuft auch erstmal alles. Teste das ganze noch mal ausgiebig.

Danke erst mal für die super Hilfe von dir


----------



## Rho (3. März 2014)

Gern geschehen. Abgesehen von dem Thread war in den letzten Tagen in diesem Bereich vom Forum ja ziemlich tote Hose. Insofern muss man ja eigentlich dankbar sein, dass mal jemand ein halbwegs interessantes Problem hatte.


----------

