LL15 und dynamischer Excel Export

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

LL15 und dynamischer Excel Export

Beitrag von Peter Schweizer »

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
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von Tom »

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?
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von brandelh »

Hallo,

du kannst komplett auf Zusatzsoftware verzichten und eine XML Datei aus einem Grundgerüst erstellen.
Das hatte ich hier einmal erwähnt: :arrow: 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
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: LL15 und dynamischer Excel Export

Beitrag von Peter Schweizer »

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
Gruss Peter
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: LL15 und dynamischer Excel Export

Beitrag von Peter Schweizer »

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
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von Tom »

Hallo, Peter.
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) ?
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!
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von brandelh »

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 ;-)

:arrow: in Wissensbasis: Export als Excel-XML-Arbeitsmappe direkt ohne Excel !
Gruß
Hubert
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: LL15 und dynamischer Excel Export

Beitrag von Peter Schweizer »

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
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von Tom »

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).
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LL15 und dynamischer Excel Export

Beitrag von brandelh »

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.
Gruß
Hubert
Antworten