Mit VB.NET PLATZHALTER & CO ansprechen

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

Moderator: Moderatoren

entwickler72
Beiträge: 5
Registriert: Do, 21.07.2011 14:43

Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
entwickler72
Beiträge: 5
Registriert: Do, 21.07.2011 14:43

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
entwickler72
Beiträge: 5
Registriert: Do, 21.07.2011 14:43

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag von entwickler72 »

:D 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
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
entwickler72
Beiträge: 5
Registriert: Do, 21.07.2011 14:43

Re: Mit VB.NET PLATZHALTER & CO ansprechen

Beitrag 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
Antworten