LL15 und dynamischer Excel Export
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
LL15 und dynamischer Excel Export
Hallo Leute,
habe da ein "kleines Problem".
Ich soll aus einem dynamisch (d.h. erst zur Laufzeit werden die benötigten Spalten ermittelt) erstellten Array eine Excel Export Datei *.xls erzeugen.
Da ich nicht sicher sein kann, das beim Kunden eine Excel Anwendung installiert ist, habe ich mir gedacht, die xls datei über List&Label erzeugen zu lassen.
Meine Probleme:
1.) Wenn ich über eine **.lst Datei gehe, dort eine Tabelle vordefiniere, verliere ich Informationen, sobald zur Laufzeit eine Spalte dazukommt oder wegfällt.
2.) Die Sortierung der Spalten kann ich nicht programmgesteuert definieren.
3.) Arbeite ich ohne Spaltenkopf und übergebe die Spaltenkopfdaten zu Laufzeit als erste Excel Zeile, so bekomme ich Fehler, weil der Typ der Überschrift (Text) und der Typ der darunterliegenden Spalte (Zahl) nicht immer gleich sind.
Bin für gute Ideen und Beispiele dankbar.
Peter
habe da ein "kleines Problem".
Ich soll aus einem dynamisch (d.h. erst zur Laufzeit werden die benötigten Spalten ermittelt) erstellten Array eine Excel Export Datei *.xls erzeugen.
Da ich nicht sicher sein kann, das beim Kunden eine Excel Anwendung installiert ist, habe ich mir gedacht, die xls datei über List&Label erzeugen zu lassen.
Meine Probleme:
1.) Wenn ich über eine **.lst Datei gehe, dort eine Tabelle vordefiniere, verliere ich Informationen, sobald zur Laufzeit eine Spalte dazukommt oder wegfällt.
2.) Die Sortierung der Spalten kann ich nicht programmgesteuert definieren.
3.) Arbeite ich ohne Spaltenkopf und übergebe die Spaltenkopfdaten zu Laufzeit als erste Excel Zeile, so bekomme ich Fehler, weil der Typ der Überschrift (Text) und der Typ der darunterliegenden Spalte (Zahl) nicht immer gleich sind.
Bin für gute Ideen und Beispiele dankbar.
Peter
Gruss Peter
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo, Peter.
Wenn Du die Professional-Version von L&L hast, steht die "DOM-API" zur Verfügung. Mit der kannst Du L&L-Projekte zur Laufzeit erzeugen, ohne den Designer, also Tabellen anlegen und bestücken, das Layout bestimmen usw. Ich hab's selbst noch nicht ausprobiert, aber laut Doku könnte es so gehen.
Ich habe zu Anfangszeiten mit L&L Arrays immer über eine allgemeine Druckroutine ausgeworfen, die das Array und das zu bestückende Formular als Parameter bekommen hat. Optional gab es ein weiteres Array (eindimensional) mit den Spaltenüberschriften. Diese Routine hat einfach das Array abgearbeitet und für jede Spalte ein Feld "SPALTEx" (x begann bei 1 und endete bei der Anzahl verfügbarer Zellen in einer Spalte) erzeugt. Die Typisierung habe ich L&L überlassen - ich habe alle Felder einfach nach Text konvertiert (über ValType()). Dadurch konnte ich alle möglichen Arrays über ein simples, allgemeines Formular drucken, und eine Variable hat dem Formular lediglich mitgeteilt, wie viele Spalten es gibt (was dann in den Spalten als Darstellungsbedingung abgefangen wurde). Das Formular beherrschte also beispielsweise maximal 60 Spalten, druckte (und exportierte) aber nur 10, wenn es eben nur 10 waren. Die Inhalte spielten dabei keine Rolle - es konnte jedes beliebige Array gedruckt werden. Die Felder hießen, wie gesagt, immer "SPALTE1", "SPALTE2" usw. Ich weiß nicht, ob ich den Code noch irgendwo habe, denn ich arbeite schon lange nicht mehr so, aber im Prinzip ist so eine Druckroutine bestenfalls ein Vierzigzeiler. Damit sollte sich auch Dein Problem lösen lassen, oder?
Wenn Du die Professional-Version von L&L hast, steht die "DOM-API" zur Verfügung. Mit der kannst Du L&L-Projekte zur Laufzeit erzeugen, ohne den Designer, also Tabellen anlegen und bestücken, das Layout bestimmen usw. Ich hab's selbst noch nicht ausprobiert, aber laut Doku könnte es so gehen.
Ich habe zu Anfangszeiten mit L&L Arrays immer über eine allgemeine Druckroutine ausgeworfen, die das Array und das zu bestückende Formular als Parameter bekommen hat. Optional gab es ein weiteres Array (eindimensional) mit den Spaltenüberschriften. Diese Routine hat einfach das Array abgearbeitet und für jede Spalte ein Feld "SPALTEx" (x begann bei 1 und endete bei der Anzahl verfügbarer Zellen in einer Spalte) erzeugt. Die Typisierung habe ich L&L überlassen - ich habe alle Felder einfach nach Text konvertiert (über ValType()). Dadurch konnte ich alle möglichen Arrays über ein simples, allgemeines Formular drucken, und eine Variable hat dem Formular lediglich mitgeteilt, wie viele Spalten es gibt (was dann in den Spalten als Darstellungsbedingung abgefangen wurde). Das Formular beherrschte also beispielsweise maximal 60 Spalten, druckte (und exportierte) aber nur 10, wenn es eben nur 10 waren. Die Inhalte spielten dabei keine Rolle - es konnte jedes beliebige Array gedruckt werden. Die Felder hießen, wie gesagt, immer "SPALTE1", "SPALTE2" usw. Ich weiß nicht, ob ich den Code noch irgendwo habe, denn ich arbeite schon lange nicht mehr so, aber im Prinzip ist so eine Druckroutine bestenfalls ein Vierzigzeiler. Damit sollte sich auch Dein Problem lösen lassen, oder?
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo,
du kannst komplett auf Zusatzsoftware verzichten und eine XML Datei aus einem Grundgerüst erstellen.
Das hatte ich hier einmal erwähnt: http://www.xbaseforum.de/viewtopic.php? ... 255#p38255
So habe ich auf unserem Terminalserver den Excel Export realisiert.
Man sollte die Anzahl der benutzen Zeilen und Spalten sauber setzen und kann als Vorlage das Dokument wie gewünscht formatieren.
Excel selbst (ab 2003) öffnet die erzeugte XML Datei genauso wie eine XLS.
Wenn es nur um den reinen Datenexport geht, kann man auch einfach eine HTM Datei mit Tabelle erzeugen und diese als .XLS abspeichern.
Das stimmt dann zwar noch nicht, Excel wird die dennoch öffnen und die Daten anzeigen. Beim Speichern wird dann daraus eine XLS - nur die Gitternetzlinien sind abgeschaltet.
du kannst komplett auf Zusatzsoftware verzichten und eine XML Datei aus einem Grundgerüst erstellen.
Das hatte ich hier einmal erwähnt: http://www.xbaseforum.de/viewtopic.php? ... 255#p38255
So habe ich auf unserem Terminalserver den Excel Export realisiert.
Man sollte die Anzahl der benutzen Zeilen und Spalten sauber setzen und kann als Vorlage das Dokument wie gewünscht formatieren.
Excel selbst (ab 2003) öffnet die erzeugte XML Datei genauso wie eine XLS.
Wenn es nur um den reinen Datenexport geht, kann man auch einfach eine HTM Datei mit Tabelle erzeugen und diese als .XLS abspeichern.
Das stimmt dann zwar noch nicht, Excel wird die dennoch öffnen und die Daten anzeigen. Beim Speichern wird dann daraus eine XLS - nur die Gitternetzlinien sind abgeschaltet.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: LL15 und dynamischer Excel Export
Hallo Tom,
vielen Dank für die schnelle Antwort.
Noch eine Frage dazu: Wenn du die Werte alle als "Text" übergeben hast, kann dann nachher Excel mit den Werten überhaupt rechnen (sofern es sich um Zahlen handelt) ?
Gruß Peter
vielen Dank für die schnelle Antwort.
Noch eine Frage dazu: Wenn du die Werte alle als "Text" übergeben hast, kann dann nachher Excel mit den Werten überhaupt rechnen (sofern es sich um Zahlen handelt) ?
Gruß Peter
Gruss Peter
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: LL15 und dynamischer Excel Export
Hallo Hubert,
dein Lösungsvorschlag hört sich zwar gut an, ich habe aber bisher keine Erfahrung mit XML Dateien.
Gibt es vielleicht irgendwo ein kleines Beispiel, daß deine Lösung zeigt ?
(Der von dir verlinkte Beitrag hat mich leider nicht schlauer gemacht)
Eine Formatierung mit Anzeige eines Gitters o.ä. brauche ich nicht.
Mein Kunde möchte lediglich die Überschrift und die Werte in Zellen dargestellt.
Gruß Peter
dein Lösungsvorschlag hört sich zwar gut an, ich habe aber bisher keine Erfahrung mit XML Dateien.
Gibt es vielleicht irgendwo ein kleines Beispiel, daß deine Lösung zeigt ?
(Der von dir verlinkte Beitrag hat mich leider nicht schlauer gemacht)
Eine Formatierung mit Anzeige eines Gitters o.ä. brauche ich nicht.
Mein Kunde möchte lediglich die Überschrift und die Werte in Zellen dargestellt.
Gruß Peter
Gruss Peter
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo, Peter.
Das kann schiefgehen, wenn man L&L die Typisierung überlässt, also mit "LLDefineField()" statt mit "LLDefineFieldExt()" arbeitet, denn L&L entscheidet in diesem Fall auf Basis des ersten Wertes, wie eine Spalte typisiert wird. Deshalb wäre es in diesem Fall wahrscheinlich sinnvoll, in der Druckroutine mit Typisierung zu arbeiten und numerische Felder (abhängig von ValType()) mit LL_NUMERIC zu übermitteln. Dann aber darf im Formular keine Formatierung stattfinden!Noch eine Frage dazu: Wenn du die Werte alle als "Text" übergeben hast, kann dann nachher Excel mit den Werten überhaupt rechnen (sofern es sich um Zahlen handelt) ?
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo Peter,
erstelle doch mal eine gewünschte XLS Datei und speichere diese zusätzlich unter XML.
Wenn du die XML Datei mit einem Texteditor ansiehst, siehst du dort im Prinzip HTML Code mit XML Tags.
Ich mache mal ein Beispiel, aber das stelle ich in die Wissensbasis - es könnte ja sonst noch wer brauchen
in Wissensbasis: Export als Excel-XML-Arbeitsmappe direkt ohne Excel !
erstelle doch mal eine gewünschte XLS Datei und speichere diese zusätzlich unter XML.
Wenn du die XML Datei mit einem Texteditor ansiehst, siehst du dort im Prinzip HTML Code mit XML Tags.
Ich mache mal ein Beispiel, aber das stelle ich in die Wissensbasis - es könnte ja sonst noch wer brauchen
in Wissensbasis: Export als Excel-XML-Arbeitsmappe direkt ohne Excel !
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: LL15 und dynamischer Excel Export
Hallo Hubert,
vielen Dank für deine ausführliche Beschreibung eines Excel Exports via XML.
Habe inzwischen nach Deinem Muster den Export vorgenommen. Es funktioniert prinzipiell einwandfrei.
Was nicht geht ist das öffnen der xml - Datei mit OpenOffice. Da klempts noch irgendwo.
Hast Du da eine Idee ?
Gruß
Peter
vielen Dank für deine ausführliche Beschreibung eines Excel Exports via XML.
Habe inzwischen nach Deinem Muster den Export vorgenommen. Es funktioniert prinzipiell einwandfrei.
Was nicht geht ist das öffnen der xml - Datei mit OpenOffice. Da klempts noch irgendwo.
Hast Du da eine Idee ?
Gruß
Peter
Gruss Peter
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo, Peter.
OpenOffice erwartet bei XML-Dateien je nach zu nutzendem Modul bestimmte Dateiendungen, siehe hier:
http://de.openoffice.org/doc/faq/xml/index.html#1
Vielleicht hat es damit etwas zu tun. Außerdem gibt es einen gesonderten "Dienst" für den Import allgemeiner XML-Dateien (etwas weiter unten im verlinkten Dokument).
OpenOffice erwartet bei XML-Dateien je nach zu nutzendem Modul bestimmte Dateiendungen, siehe hier:
http://de.openoffice.org/doc/faq/xml/index.html#1
Vielleicht hat es damit etwas zu tun. Außerdem gibt es einen gesonderten "Dienst" für den Import allgemeiner XML-Dateien (etwas weiter unten im verlinkten Dokument).
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: LL15 und dynamischer Excel Export
Hallo Tom,
die von mir erzeugten XML-Dateien sind keine freien Daten (wobei der Import von freien XML-Daten ein interessanter Ansatz ist),
sondern das offizielle XML-Excel Dateiformat. Excel kommt damit gut zurecht, OpenOffice scheint etwas spröder zu sein
Wenn man die Zieldatei in Excel öffnet und einfach wieder abspeichert, wird sie auch von OpenOffice gelesen.
Ich werde mal sehen ob ich die Fehler finde.
Was mir jetzt aufgefallen ist:
Ich habe am Anfang von "Test-Muster-Arbeitsblatt.xml" einige seltsame Zeichen gefunden und entfernt (die ZIP oben wird sofort ausgetauscht).
Weiterhin sind einige Leerzeilen enthalten, die aber keine Rolle spielen dürften ...
Ich verwende in der XML Datei die HTML-Umlaute, Excel speichert diese als anderes Zeichen ab. Eventuell stören diese OpenOffice.
Ob Excel UTF8 speichert ?
Die Umlaute sind weder ANSI noch OEM ... genau, Notepad++ meldet UTF8.
Also muss man die eingesetzten Daten zuerst nach UTF8 umwandeln, statt nach HTML. Dazu gibt es hier auch eine Funktion ...
Wenn ich im defekten Dokument die HTML-"Straße" nach UFT8-"Straße" umsetze, dann öffnet auch OpenOffice.
die von mir erzeugten XML-Dateien sind keine freien Daten (wobei der Import von freien XML-Daten ein interessanter Ansatz ist),
sondern das offizielle XML-Excel Dateiformat. Excel kommt damit gut zurecht, OpenOffice scheint etwas spröder zu sein
Wenn man die Zieldatei in Excel öffnet und einfach wieder abspeichert, wird sie auch von OpenOffice gelesen.
Ich werde mal sehen ob ich die Fehler finde.
Was mir jetzt aufgefallen ist:
Ich habe am Anfang von "Test-Muster-Arbeitsblatt.xml" einige seltsame Zeichen gefunden und entfernt (die ZIP oben wird sofort ausgetauscht).
Weiterhin sind einige Leerzeilen enthalten, die aber keine Rolle spielen dürften ...
Ich verwende in der XML Datei die HTML-Umlaute, Excel speichert diese als anderes Zeichen ab. Eventuell stören diese OpenOffice.
Ob Excel UTF8 speichert ?
Die Umlaute sind weder ANSI noch OEM ... genau, Notepad++ meldet UTF8.
Also muss man die eingesetzten Daten zuerst nach UTF8 umwandeln, statt nach HTML. Dazu gibt es hier auch eine Funktion ...
Wenn ich im defekten Dokument die HTML-"Straße" nach UFT8-"Straße" umsetze, dann öffnet auch OpenOffice.
Gruß
Hubert
Hubert