Seite 1 von 1
Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Do, 21.07.2011 21:15
von entwickler72
Hallo,
möchte gerne über vb.net ein Write/Calc - Dokument öffnen und gleichzeitig bestimmte Platzhalter mit Text und Tabellen füllen.
Desweiteren möchte ich den zu Speichernden Pfad + Dateiname für das Dokument übergeben.
für eine Textmarke habe ich es geschaft , aber für einen Platzhalter habe ich das nicht gefunden
Code: Alles auswählen
Sub CreateDocument()
Dim objServiceManager As Object
Dim objDesktop As Object
Dim objDocument As Object
Dim aNoArgs(-1)
Const objDocName = "file:///C:\MyDoc.odt"
objServiceManager = CreateObject("com.sun.star.ServiceManager")
objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
objDocument = objDesktop.loadComponentFromURL(objDocName, "_blank", 0, aNoArgs)
objDocument.Bookmarks.getByName("Textmarke1").getAnchor.setString("Yea, funzt prima!")
objServiceManager = Nothing
objDesktop = Nothing
objDocument = Nothing
End Sub
Mfg
entwickler
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Fr, 22.07.2011 18:19
von Axel Richter
Hallo,
Platzhalter sind Textfelder. Du musst die Enumeration aller Textfelder durchlaufen und Dir die gewünschten herauspicken.
Code: Alles auswählen
enumAccessTextfields = objDocument.TextFields
enumTextfields = enumAccessTextfields.CreateEnumeration
do while enumTextfields.hasMoreElements()
oElement = enumTextfields.nextElement()
if oElement.supportsService("com.sun.star.text.TextField.JumpEdit") then
'oElement ist ein Platzhalterfeld
if oElement.PlaceHolderType = 0 then
'oElement ist Platzhalter vom Typ Text
if oElement.PlaceHolder = "Test" then
'Platzhaltertext ist "Test"
oElement.getAnchor().String = "Ersetzungstext"
endif
endif
if oElement.PlaceHolderType = 1 then
'oElement ist Platzhalter vom Typ Tabelle
'...
endif
endif
loop
viele Grüße
Axel
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Fr, 22.07.2011 22:24
von entwickler72
hallo Axel,
danke für Antwort
werde das ausprobieren. was ich aber nicht verstehe ist warum ich alle Enumerationen aller Textfelder durchlaufen muss ?
weil ich bei
Code: Alles auswählen
objDocument = objDesktop.loadComponentFromURL(objDocName, "_blank", 0, aNoArgs)
objDocument.Bookmarks.getByName("Textmarke1").getAnchor.setString("Yea, funzt prima!")
direkt drauf zugreifen kann. Oder ist das bei Textmarken anders wie bei Funktionen/Platzhalter.
Ich dachte mir so :
Code: Alles auswählen
objDocument = objDesktop.loadComponentFromURL(objDocName, "_blank", 0, aNoArgs)
objDocument.Placeholder.getByName("Platzhalter1").getAnchor.setString("Yea, funzt prima!")
aber egal, viele wege führen nach ROM
Mfg
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Fr, 22.07.2011 22:48
von entwickler72

super hat funktioniert.
kann man auch ein ereigniss von oo nach .net anlegen. Damit ich auf der VB.NET seite eine Funktion starten kann.
Mfg
Entwickler
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Sa, 23.07.2011 09:48
von Axel Richter
Hallo entwickler72,
entwickler72 hat geschrieben:was ich aber nicht verstehe ist warum ich alle Enumerationen aller Textfelder durchlaufen muss ?
Dein Name impliziert, dass Du etwas davon verstehen solltest. Deshalb mal technisch:
Das Textdokument implementiert das Interface
http://api.openoffice.org/docs/common/r ... plier.html.
Dieses definiert die Methode getBookmarks, welche ein
http://api.openoffice.org/docs/common/r ... ccess.html zurückliefert, mit der Collection aller Bookmarks des Dokuments.
Darin gibt es dann die Methode getByName.
Deshalb kannst Du auf Bookmarks über deren Namen zugreifen.
Für Textfelder, also auch Platzhalter, gibt es nur
http://api.openoffice.org/docs/common/r ... plier.html mit getTextFields.
Dieses gibt ein
http://api.openoffice.org/docs/common/r ... ccess.html zurück und dort gibt es nur createEnumeration als Zugriffsmöglichkeit.
Kürzer:
Es gibt halt kein .Placeholders.getByName im Textdokument
Für die Entwicklung mit OpenOffice oder LibreOffice braucht man dringend die Möglichkeit, die OO-Objekte untersuchen zu können.
Ein gutes Werkzeug dafür ist xray
http://wiki.services.openoffice.org/wik ... X-Ray_tool. Download von
http://bernard.marcelly.perso.sfr.fr/index2.html.
viele Grüße
Axel
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Sa, 23.07.2011 10:01
von Axel Richter
Hallo entwickler72,
entwickler72 hat geschrieben:kann man auch ein ereigniss von oo nach .net anlegen. Damit ich auf der VB.NET seite eine Funktion starten kann.
Werde mal etwas konkreter.
So, wie ich es bisher sehe, holst Du Dir doch aus VB.NET heraus den Zugriff auf das OO-Textdokument und manipulierst dieses. Jetzt soll eine Aktion *in* diesem OO-Textdokument eine Reaktion in VB.NET auslösen? Das hört sich nach einem Listener auf VB.NET-Seite an. Keine Ahnung, ob und wie das geht. Aber wenn Du es etwas genauer beschreibst, weiß eventuell jemand anderer etwas dazu.
viele Grüße
Axel
Re: Mit VB.NET PLATZHALTER & CO ansprechen
Verfasst: Sa, 23.07.2011 15:52
von entwickler72
Hallo Axel,
Danke für die Erklärung
Den Event von oo nach vb.net Funktion brauche ich um zu dokumentieren ob der Benutzer das von VB.NET geöffnete Dokument gespeichert worden ist oder geschlossen ohne zu speichern.
schau mal unter
http://wiki.services.openoffice.org/wik ... d_Handlern
werde mal auf diesem Weg ein Event auf der VB.NET Seite versuchen auszulösen
Mfg
Entwickler