Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Tabelle in OpenOffice zugreifen (https://www.delphipraxis.net/203128-tabelle-openoffice-zugreifen.html)

NicoleWagner 15. Jan 2020 20:30

Tabelle in OpenOffice zugreifen
 
In LibreOffice 6.4. (der Nachfolger von OpenOffice) habe ich eine Tabelle mit sehr vielen Zeilen zu je 2 oder 3 Zellen.
Ich möchte nach dem "String" der ersten Zelle suchen und mir die zweite Zelle als Text ausgeben lassen.

Ich frage also von Delphi etwa ab "Blumen und Nelken" (Zelle 1) und bekomme als Antwort die Zelle 2, also Hausnummer "Vorkommen überall und in Klein-Asien, bitte stell sie in die Vase".
(die dritte Zelle ist fakultativ und ich brauche sie nicht)

Meine Fragen:
Wie lese ich eine OO Tabelle zeilenweise (!) in Delphi ein? Denn zuweilen sind es zwei, manchmal drei Zellen.
Wie greife ich die Zellen darauf zu?

Altenativ: Wie verwandle ich eine OO Tabelle in eine Firebird-DB-Tabelle? (ja, das ist kühn, doch die Hoffnung stirbt zuletzt)

Danke für Tipps!

hoika 15. Jan 2020 20:35

AW: Tabelle in OpenOffice zugreifen
 
Hallo,
vielleicht findest Du hier was dazu
https://www.freepascal.org/~michael/...openoffice.pdf

p80286 16. Jan 2020 06:29

AW: Tabelle in OpenOffice zugreifen
 
Zitat:

Zitat von NicoleWagner (Beitrag 1455271)

Altenativ: Wie verwandle ich eine OO Tabelle in eine Firebird-DB-Tabelle? (ja, das ist kühn, doch die Hoffnung stirbt zuletzt)

Wenn es da nichts outofthebox gibt dann ist Dein Stichort ASCIIDelimited(CSV).Das geht so ziemlich mit allen Datenbanken und Tabellenkalkulationen. Du mußt nur aufpassen, daß Dir die eingebaute Intelligenz keinenStrich durch die Rechnung macht. Also der Delimiter und die Quotes sollten möglichtst auf beiden Seiten definierbar sein.
Und der verwendete Zeichensatz muß natürlich von beiden Seiten verstanden werden.

Gruß
K-H

mkinzler 16. Jan 2020 07:58

AW: Tabelle in OpenOffice zugreifen
 
Ich bin schon länger von OpenOffice auf LibreOffice gewechselt. In LibreOffice wurde in StarBase die intere Datenbank von HSQL auf FireBird embedded umgestellt. Hier gäbe es u.U. eine Möglichkeit die Daten einfach zu konvertieren. Sonst halt über den Umweg von CSV.

NicoleWagner 16. Jan 2020 14:23

AW: Tabelle in OpenOffice zugreifen
 
Danke für alle Antworten.

Meine Schwierigkeit: Wenn ich die Tabelle in text konvertiere, dann bleibt davon ein sinnloser Haufen Textschnipsel übrig. Womit sie cvs mit sehr hohe Wahrhscheinlichkeit erübrigt. (Ich habe da Arbeit in 50 Seiten Tabelle investiert. Erst danach fiel mir ein.... usw. Ihr kennt das.)

Aufhorchen lässt mich "LibreOffice" und "Firebird". Ja doch, ich habe LibreOffice 6.4.0.1
Hast Du da Details dazu wie man das in Delphi / Firbird bringt?

Und gerade probierte ich, die Tabelle mit copy und paste in ods (Format für Calc = "Excel") zu bringen. Das hat geklappt.
Innerhalb von Excel hätte ich jetzt noch die VBA Möglichkeit. Doch in Calc probierte ich die noch nie und wie ich VBA mit Delphi interagieren lassen könnte, da schaue ich leider nur vollkommen ratlos.

Doch grundsätzlich: auch Zugriff in ods wäre ein Weg.



PS: ein weiterer Weg wäre, wenn ich via Delphi OO / LO öffnen könnte mit Parameter: Datei und eine Suchanfrage-nach-einem-String. Diese Suchanfrage würde mir dann auch die Datei / Tabelle / Zelle / Zeile an der richtigen Stelle öffnen.

Jumpy 16. Jan 2020 16:07

AW: Tabelle in OpenOffice zugreifen
 
In dem Dokument, das hoika verlinkt hat, steht doch mMn alles drin, um anzufangen. Nur anstatt ein Calc/OpenOffice-Dokument zu öffnen und was reinzuschreiben, liest man es halt aus.

HolgerX 16. Jan 2020 18:02

AW: Tabelle in OpenOffice zugreifen
 
Hmm..

Könnte es sein, dass beide (Libre Office und Open Office) noch die selbe OLE-Schnittstelle haben?

Wenn ja, kannst Du wie z.B. bei EXECL per OLE direkt das Dokument im Libre Office öffnen und die Zellen einfach per Schleife auslesen.

Wir hatten vor längerem per OLE mit OpenOffice Daten als Tablle per Calc exportiert..

Wenn der obrige Link (von hoika) nicht reicht, einfach mal nach OpenOffice und OLE googlen..

NicoleWagner 16. Jan 2020 18:02

AW: Tabelle in OpenOffice zugreifen
 
Ich bin von dem Dokument etwas überfordert.

Wie etwa würdest Du formulieren:


string_erste_Zelle:= (Tabelle x, erste Zeile, erste Zelle);
string_erste_Zelle_Text_der_dazgehört:=(Tabelle x, erste Zeile, zweite Zelle);

Wenn eine dritte Zelle mit gebrochenem Verweis vorhanden ist oder gar keine dritte Zelle, dann geht zur zweiten Zeile.
Ist der Verweis gültig, speichere die Seitenzahl.

NicoleWagner 16. Jan 2020 19:30

AW: Tabelle in OpenOffice zugreifen
 
@ Holger

Googelte OLE und wieder erschlugen mich die Ergebnisse.

Ich hoffte hier ein paar Zeilen kopieren zu können.
https://www.swissdelphicenter.ch/de/...de.php?id=1728

Doch ich scheitere schon hier:
XLApp := CreateOleObject('Excel.Application');
Ich lese "undeklarierter Bezeichner ole-Object"

Du hast sicher schon erraten, dass ich von OLE keine Ahnung habe.
Also suchte ich in meiner Tool Palette und fand:
TOleContainer.
Den klebte ich auf mein Formular.

Man kann wohl davon ausgehen, dass es völlig absurd ist, was ich versuchte. Doch weiß ich im Augenblick nicht, wo ich beginnen könnte, dass es Sinn macht.

hoika 16. Jan 2020 22:11

AW: Tabelle in OpenOffice zugreifen
 
Hallo,
was hat denn Excel mit Libre-Office zu tun?

Lemmy 17. Jan 2020 04:32

AW: Tabelle in OpenOffice zugreifen
 
es war vor langer Zeit, da hatte ich darüber mal im "Entwickler" (6-2003) einen Artikel geschrieben... Hier
https://sourceforge.net/p/oo-automation/code/HEAD/tree/
kann man sich die Sourcen holen, die ich dann später mit einem weiteren Entwickler aktualisiert habe.

Sind aber schon älter und ich habe das mit einem aktuellen OO oder LO nicht mehr versucht, aber ich hoffe, dass die Sourcen als Einstieg ausreichen. Das Objektmodell von OO / LO ist jetzt nicht unbedingt selbst erklärend, aber wenn man sich etwas mit der Doku beschäftigt kommt man auch da rein.

HolgerX 17. Jan 2020 08:30

AW: Tabelle in OpenOffice zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Hab da mal was zusammen gebastelt..

Das (einfache) Testtool ist mit D6 erstellt, sollte aber auch unter 10.x laufen. Habe hierzu das aktuelle LibreOffice (Ver.6.3.4.2 x64) verwendet.

Es liest eine ODS mithilfe OLE über LibreOffice in ein StringGrid ein, um Dir zu zeigen, wie auf eine Celle zugegriffen werden kann.

Performanter würde dies natürlich über eine Range statt der einzelnen Cell gehen, aber hier geht es erstmal um das Grundverständnis. ;)

jobo 17. Jan 2020 09:51

AW: Tabelle in OpenOffice zugreifen
 
Andere Idee:
aus der zweizeiligen Relation eine einzeilige machen:

a|b |c|d
--------------
1|schlüssel|.|..
2|wert |.|..
3|..
4

a|b |c|d |e
----------------|
1|schlüssel|.|..|wert |.|..|
x|xxxx |.|..|
3|..


Diese Operation macht man per Makro in Excel oder LO

Das Ergebnis ist eine Datei, die als CSV oder wie auch immer zu einer Tabelle werden kann. Die Tabelle ist ganz einfach durchsuchbar (klassich) und man erhält zum gefundenen Schlüssel gleich alle Werte.

P.S.: Mit smarten DB kann man auch alles so lassen und es per Window Function Query über LAG() oder LEAD() lösen. Einfach alles in SQLite bspw. importieren oder postgreSQL.

NicoleWagner 17. Jan 2020 10:11

AW: Tabelle in OpenOffice zugreifen
 
Wenn Du eine Lösung zu Libre Office weißt, - bitte poste sie.
Da ich selbst keine weiß, nehme ich auch einen Workaround.
LO ist kompatibel zu MS-Office und kann auch in diesen Formaten abspeichern. Daher wäre das ein denkbarer Weg zum Workaround das Excel-Format.

jobo 17. Jan 2020 10:36

AW: Tabelle in OpenOffice zugreifen
 
Wenn Du Dich auf meinen Vorschlag beziehst, hier ist eine Variante die man mit sqlite erzeugen kann, ohne zu programmieren:
https://rextester.com/WZHK48281

Das Beispiel ist in Postgres, sollte so auch in SQLite funktionieren.
Du musst nur Deine LO Daten in CSV exportieren und in sqlite einlesen.

p80286 17. Jan 2020 11:36

AW: Tabelle in OpenOffice zugreifen
 
Ich mußmich korrigieren, lt. OnlineHilfe von LibreOffice kann man wohl Importe in Base nur mit Copy and Paste realisieren:oops:

Gruß
K-H

NicoleWagner 17. Jan 2020 13:41

AW: Tabelle in OpenOffice zugreifen
 
Jobo, danke für das Link.
Bin ich völlig blind? Ich sehe, wie man eine Tabelle anlegt, doch in welcher Zeile steht der Zugriff mit Excel?
Bitte um eine Brille bzw. Zeilennummer. Danke.

Noch eine ganz andere Idee habe ich: Steema TeeChart. Ich fand eine Pro Version 2014 auf meinem PC. Und auch ein Tutorial. Allerdings fürchte ich fast, dass man damit nur Kurven aus Excel importieren kann und mit Steema darstellen. Bevor ich mir 3 Tage umsonst die Tutorials reinziehe: Weiß hier jemand Details? Bietet Teechart 2014 Pro eine Excel-Schnittstelle per se?

Moombas 17. Jan 2020 13:52

AW: Tabelle in OpenOffice zugreifen
 
Zitat:

Zitat von NicoleWagner (Beitrag 1455420)
Jobo, danke für das Link.
Bin ich völlig blind? Ich sehe, wie man eine Tabelle anlegt, doch in welcher Zeile steht der Zugriff mit Excel?
Bitte um eine Brille bzw. Zeilennummer. Danke.

Was suchst du nun? OpenOffice oder Excel?

jobo 17. Jan 2020 14:06

AW: Tabelle in OpenOffice zugreifen
 
Zitat:

Zitat von NicoleWagner (Beitrag 1455420)
Bin ich völlig blind?

Nein, aber deine Erwartungshaltung ist vielleicht etwas hoch.
das ist keine fertige Lösung, nur ein Beispiel, wie man Deine Daten in "ordentliche Daten" transformiert.

Dazu musst Du zuvor noch Deine Daten aus Excel oder Base exportieren und dann in z.B. SQLite importieren.

Dann die Spaltennamen aus meinem Beispiel an Deine Realität anpassen und Du bist fertig > also hast richtige Daten.

Die kannst Du wieder in LO Base, Excel oder was auch immer importieren.

Das ganze ist eine Nicht-Programmier-Lösung. Ideal für den einmaligen Einsatz. Aufwand vermutlich deutlich unter 1h.

NicoleWagner 17. Jan 2020 14:51

AW: Tabelle in OpenOffice zugreifen
 
... "zuvor noch" Deine Daten aus Excel oder Base exportieren..
Das ist ja meine Frage: Wie geht das?

In (m)eine Datenbank schreiben kann ich die Daten dann auch selbst, sobald ich sie einmal unter meiner Kontrolle habe.

Moombas 17. Jan 2020 14:54

AW: Tabelle in OpenOffice zugreifen
 
Zitat:

Zitat von NicoleWagner (Beitrag 1455430)
... "zuvor noch" Deine Daten aus Excel oder Base exportieren..
Das ist ja meine Frage: Wie geht das?

In (m)eine Datenbank schreiben kann ich die Daten dann auch selbst, sobald ich sie einmal unter meiner Kontrolle habe.

Nochmal die Frage: Sind deine Daten nun in Excel oder OpenOffice?

Zum zweiten: Suchst du eine einmalige Lösung (Daten einmal exportieren/auslesen und woanders (z.B. SQLite) importieren und dann nur noch in der neuen Quelle nutzen) oder eine dauerhafte (immer wieder Daten exportieren/auslesen und woanders (z.B. SQLite) importieren)?

Jumpy 17. Jan 2020 14:56

AW: Tabelle in OpenOffice zugreifen
 
Ich versteh irgendwie nicht mehr, worum es überhaupt geht. Soll hier einmalig eine Calc-Datei umgewandelt und irgendwo importiert werden, oder soll das regelmäßig geschehen? Wie/Warum kommt Delphi ins Spiel?

NicoleWagner 17. Jan 2020 15:01

AW: Tabelle in OpenOffice zugreifen
 
Ganz lieben Dank an Lemmy und HolgerX! (und auch alle anderen)
Die Sachen habe ich mir jetzt alle heruntergeladen und entpackt. Sie sehen überaus vielversprechend aus und ich werde mich die nächsten Tage einmal ans Verstehen und Testen machen!

NicoleWagner 17. Jan 2020 19:23

AW: Tabelle in OpenOffice zugreifen
 
@ HolgerX
Ganz lieben Dank, dass Du Di die Arbeit gemacht hast!
Es klappt mit der Testdatei ebenso wie mit meiner riesigen Tabelle. Sie wird tadellos angezeigt, inkl. der eigenwilligen Felder.

Ich bin nur mehr eine Nasenlänge von der Lösung entfernt. Es funktioniert prima - auf meinem Win 10 Rechner.
Doch nicht in meiner Delphi VM.
Das liegt vermutlich daran, dass dort weder Excel noch OpenOffice installiert ist.
Der Compiler wirft mich mit diesen Meldung un bei dieser Zeile raus:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Test_OO_Calc.exe ist eine Exception der Klasse EOleSysError mit der Meldung 'Ungültige Klassenzeichenfolge' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

---------------------------
Test_oo_calc
---------------------------
Ungültige Klassenzeichenfolge, ProgID: "com.sun.star.ServiceManager"
---------------------------
OK
---------------------------

es passiert in dieser Zeile:
objServiceManager := CreateOleObject('com.sun.star.ServiceManager');


Was muss ich als Minimum installieren, damit es auch in meiner ProgrammierVM läuft?

p80286 17. Jan 2020 23:13

AW: Tabelle in OpenOffice zugreifen
 
LibreOffice!

Gruß
K-H

hoika 18. Jan 2020 08:14

AW: Tabelle in OpenOffice zugreifen
 
Hallo,
LibreOffice muss in der VM natürlich installiert sein.

HolgerX 18. Jan 2020 14:30

AW: Tabelle in OpenOffice zugreifen
 
Hmm..

Über OLE (wie in meinem Testtool) wird das entsprechende Programm ferngesteuert, somit muss dieses auch installiert sein, damit es klappt.
Somit (wie von den Vorrednern bereits gesagt) das LibreOffice.

Die Klassenzeichenfolge "com.sun.star.ServiceManager" ist erst nach Installation verfügbar.
Ich habe die Exception im Beispiel nicht mit einer Aussagekräftigen Fehlermeldung abgefangen...

NicoleWagner 25. Jan 2020 17:24

AW: Tabelle in OpenOffice zugreifen
 
Danke für alle Antworten!

Es geht jetzt und ich habe Office "fast" installiert.
Erklärung: Meine Programmier-VM soll schlank bleiben, da soll kein Office Paket hinein.

ad "fast": Ich habe mir einen Ordner auf dem Host gemacht, auf den die VM Zugriff bekam. Dort liegt mein Delphi-Source und die Office-Datei. Zum Debuggen erzeuge ich die exe von der VM her und starte sie von außen, vom Host aus. Da wird das Office-Paket gefunden und die neue Funktionlität läuft schon.
Nachteil: Jener Button, der die Ole-Funktionalität startet und alle abhängigen Teile davon, sind innerhalb der IDE nicht zu debuggen, sondern nur etwa mittels ShowMessage via Host.

jobo 25. Jan 2020 20:42

AW: Tabelle in OpenOffice zugreifen
 
Zitat:

Zitat von NicoleWagner (Beitrag 1455994)
Nachteil: Jener Button.. sind innerhalb der IDE nicht zu debuggen, sondern nur etwa mittels ShowMessage via Host.

Ein verbreitetes Verfahren jenseits von Debugging (schrittweise durch das laufende Programm gehen) ist das Logging. Die Anwendung schreibt dazu in den Einzelnen Routinen in eine Log Datei, wo sie sich gerade befindet (Welche Prozedur, ..) und wie die Werte wichtiger Variablen aussehen.
Mittels "Debug Level", einem von außen gesteuerten Parameter wird dabei vorgegeben, in welcher Tiefe die Ausgabe von Logdaten erfolgen soll. So wird vermieden, dass zu viele Ausgabedaten entstehen.

Die Ausgabedaten können dann mit geeigneten Tools offline oder live verfolgt werden, Standardinfo ist dabei an erster Stelle meist Datum und Uhrzeit, um sinnvoll mit den Ausgaben arbeiten zu können.

himitsu 25. Jan 2020 21:08

AW: Tabelle in OpenOffice zugreifen
 
Remote Debugger :zwinker:
http://docwiki.embarcadero.com/RADSt...mote_Debugging


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz