BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Writer Vorlage (ott) aus Access 2007 füllen

Alles zur Programmierung im OpenOffice.org
Antworten
5ky
Beiträge: 1
Registriert: Mi 22. Jul 2009, 18:19

Writer Vorlage (ott) aus Access 2007 füllen

Beitrag von 5ky » Mi 22. Jul 2009, 18:35

Hallo liebe OpenOffice Gemeinde,
ich bin neu hier und starte gleich mal mit einem sehr wichtigen Thema für mein momentanes Projekt.

Ich habe eine Writer Vorlagendatei in *.ott wo ich Probeweise eine Textmarke, 2 mit Namen versehene Rahmen und 1 mit Namen versehenes Bild.

Nun habe ich in diversen OO Programmen z.B. Calc, Writer oder auch Base einen Button, welcher mir die beiden Rahmen und das Bild mit lokal gespeicherten Daten füllt.
Gerne hätte ich jedoch, dass nicht nur die Daten in der Vorlage erscheinen, sondern auch in Calc oder Base gespeichert werden. Hier bin ich allerdings bei Base gescheitert aufgrund der nicht vorhandenen Endlosformulare. Ich habe die Funktion weder selbst gefunden noch in Foren oder Google eine Lösung gefunden.

Das komplette Projekt ist bereits fertig umgesetzt in MS Access 2007. Auf den Rechnern, wo das System laufen soll, würde daher lediglich die Runtime installiert werden.
Da es ja hier schon fertig ist und nach 2 wöchiger Entwicklungszeit auch sauber funktioniert, gehe ich jetzt diesen Weg weiter, sodas das Access Projekt weiter bestehen bleibt.

Warum die Writer Vorlage? Ganz einfach. Letzendlich wollen wir PDF´s haben, welche individuelle Außenmaße haben. z.B. 8,7cm x 5,7cm. Dies ist leider mit der Bericht Funktion in Access 2007 gar nicht möglich, geschweige denn dass in Base ein derartiger Bericht erzeugt werden konnte. Eine Umsetzung in eine Word 2007 Vorlage fand statt, hat nach langer Zeit auch funktioniert, allerdings wird eben Word 2007 benötigt, was wiederum Kosten verursachen würde. Deshalb MUSS ich neben der kostenlosen Access Runtime auf OpenOffice ausweichen und deshalb die Writer Vorlage.

Mit einer Textmarke in der Vorlage funktioniert mit folgendem Code die Textübergabe aus einem Textfeld von Access 2007 in die Writer Vorlage:

Const DatName = "file:///c:/test test/template.ott"
Dim ooApp As Object, ooDesk As Object, ooDoc As Object
Dim args()

Set ooApp = CreateObject("com.sun.star.ServiceManager")
Set ooDesk = ooApp.createInstance("com.sun.star.frame.Desktop")
Set ooDoc = ooDesk.loadComponentFromURL(DatName, "_blank", 0, args)

With ooDoc
.Bookmarks.getByName("Text1").getAnchor.setString ("Neuester Wert TM1")
.Bookmarks.getByName("Adresse").getAnchor.setString ("Neueter Wert TM2")
' ...
.Store
.Close (True)
End With

Meine Große Frage:
In der With Anweisung werden die Textmarken der Vorlage angesprochen z.B. Text1.
1. Wie kann ich aber z.B. den benannten Rahmen z.B. Rahmen1 ansprechen? Mit den Rahmen können wir wesentlich genauere Plazierungen vornehmen und diese Rahmen auch von der Größe her sauber anpassen. Aus Base gehts ja.
2. Wie kann ich das Bild Element ansprechen? also quasi die URL zur Bilddatei?
Im Endeffekt beläuft sich alles auf den kleinen Abschnitt ".Bookmarks" welcher offensichtlich für die Textmarken steht.

Hier füge ich noch den Code des Base Buttons ein, welcher mir die Rahmen und Bilder URL an die Vorlage übergibt. Diese Funktioniert ja auch.

oDoc = ThisComponent
oForm = oDoc.drawpage.forms(0)

' Standard Template laden
Url = "file:///C:/test test/template.ott"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

'Dokumentcontent durchforsten
For i = 0 to Doc.DrawPage.Count - 1
Shape = Doc.DrawPage(i)

'Bilddatei Bild1
If Shape.Name = "Bild1" Then
oBild1 = oForm.getByName( "txtBild1" )
sBild1=oBild1.Text
Shape.GraphicURL = "file:///" & sBild1
End If

'Textobjekt Text1
If Shape.Name = "Text1" Then
oText1 = oForm.getByName( "txtText1" )
sText1=oText1.Text
Cursor = Shape.Text.createTextCursor
Text1 = sText1
Cursor.String = Text1
End If

'Textobjekt Adresse
If Shape.Name = "Adresse" Then
oAdresse = oForm.getByName( "txtAdressdaten" )
sAdresse=oAdresse.Text
Cursor = Shape.Text.createTextCursor
Adresse = sAdresse
Cursor.String = Adresse
End If
Next

Ich hoffe ich bin hier Richtig und es findet sich bald jemand, der mir Helfen kann.

MfG
5ky

Antworten