[gelöst]Calc Datei z.B als Vorlage in Base-Datei einbetten

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

[gelöst]Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von F3K Total »

Guten Tag zusammen,
ich habe schon etwas geforscht:

1.) Wenn ich eine Base-Datei "entzippe" sehe ich den Inhalt der Datenbankdatei(1)
Im Ordner "forms" liegen die Formulare(2)
öffne ich "Obj11" sehe ich diese Struktur(3)
die wiederum bis auf die fehlenden "META-INF" und mimetype (4) den Daten entsprechen, die ich erhalte wenn ich das Formulardokument aus der Datenbankdatei heraus separat speichere.
1_1.png
1_1.png (77.42 KiB) 1724 mal betrachtet
Kopiere ich den Ordner "Obj11" auf die Platte, füge die "META-INF" der separat gespeicherten Datei hinzu und "zippe" sie wieder, kann ich mein ehemals eingebettetes Formular als Writer-Datei direkt öffnen.
D.h. nach meinem Verständnis, in der .odb liegen im Ordner "forms" schlicht abgespeckte "Writer-Dokumente".

2.) Wenn ich in der "entzippten" Base-Datei einen zusätzlichen Ordner anlege, z.B. "templates", sieht das so aus:
1_2.png
1_2.png (4.87 KiB) 1724 mal betrachtet
Hier kann ich nun selbst einen Ordner "Obj11" mit den Daten z.B. einer "Calc-Datei" einfügen.

Jetzt wird die Base Datei wieder "gezippt" und in .odb umbenannt, dann kann ich sie fehlerfrei öffnen und benutzen.
Mit diesem Befehl:
xray thisdatabasedocument.documentstorage.templates.Obj11.elementnames
kann ich jetzt sogar meine selbst angelegten Daten, die sich innerhalb der .odb Datei befinden, sehen:
1_3.png
1_3.png (23.68 KiB) 1724 mal betrachtet
Nun kommt endlich die Frage:

Wie kann ich die eingebettete Calc-Datei jetzt öffnen?

Ich habe überall gesucht, nix gefunden.

beste Grüße von Rik
Zuletzt geändert von F3K Total am Mo, 26.09.2011 18:51, insgesamt 1-mal geändert.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von DPunch »

Aloha

Mit dem genauen Aufbau der Dateien selber kenne ich mich leider zu wenig aus, als dass ich Dir sagen könnte, wie Du Stream-Zugriff auf derart gespeicherte Dateien im Package bekommst.

Aber in meinen Augen wäre es sowieso sinnvoller, die Vorlagen in in einer eigenen "Templates"-Tabelle der Datenbank als BLOB zu hinterlegen und von dort zu laden.
Das macht das Ganze deutlich übersichtlicher und vor allem viel leichter zu organisieren.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von F3K Total »

Hallo DPunch,

Dein Vorschlag hört sich sehr gut an.
Kannst Du mir ein Beispiel geben? Eine Base-Datei, die eine Calc-Datei enthält?
Wie öffne ich die Calc-Datei dann per Makro? Die Sache mit dem "streamelement" usw. habe ich bisher nicht verstanden.
Es fängt leider schon damit an, dass ich nicht weiß, welcher Dateityp in der embeddet HSQL-DB dem BLOB entspricht.

Beste Grüße von Rik
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von DPunch »

Aloha

Siehe Anhang.
Ist nur auf die Schnelle zusammengeschustert, möglicherweise hab ich den einen oder anderen potenziellen Fehler nicht bedacht, aber es funktioniert und das Grundprinzip sollte klar werden.
F3K Total hat geschrieben:Es fängt leider schon damit an, dass ich nicht weiß, welcher Dateityp in der embeddet HSQL-DB dem BLOB entspricht.
BLOB steht für "Binary Large Object", das entsprechende Feld muss also ein Binärfeld sein (VARBINARY).
Dateianhänge
BLOB_Stream.odb
(52.15 KiB) 86-mal heruntergeladen
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von F3K Total »

Hallo DPunch,
Hammer, vielen Dank, klappt hervorragend.
Da wäre ich nicht so schnell, wenn überhaupt, drauf gekommen!
Ich werde meine DB so umbauen.
Habe nämlich inzwischen 18 Templates und eine Doku, die ich parallel zur DB immer mitschleppen muß. Auf diese Weise werde ich also aufräumen.
Den Code kann ich bis auf einen Parameter nachvollziehen.
oStream = oStorage.openStreamElement("ms777", com.sun.star.embed.ElementModes.READWRITE)
Kannst Du mir sagen was "ms777" bedeutet?

Beste Grüße von Rik
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von DPunch »

Aloha
F3K Total hat geschrieben:Kannst Du mir sagen was "ms777" bedeutet?
Das hat keine bestimmte Bedeutung, es ist ein normaler NameAccess - Du kannst auch "bla" dahinschreiben. Was genau Du da für einen Namen verwendest, ist nur dann wichtig, wenn Du später nochmal auf dieses temporäre Storage-Element zugreifen willst / musst.
Das "ms777" hatte ich so stehen gelassen, weil die Zeile nicht original von mir ist, sondern vom user ms777 im englischen Forum.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Calc Datei z.B als Vorlage in Base-Datei einbetten

Beitrag von F3K Total »

Hallo Dpunch,
na, dann weiss ich jetzt, dass ich da nix falsch machen kann.
Inzwischen habe ich ein Calc-Template in eine meine DBs eingebettet.
Es wird dann per Makro aus einem Formular heraus gefüllt und direkt gedruckt.
Klasse, funktioniert wunderbar, also nochmal vielen Dank.

Beste Grüße von Rik
Antworten