Mit VB.NET PLATZHALTER & CO ansprechen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Mit VB.NET PLATZHALTER & CO ansprechen

Re: Mit VB.NET PLATZHALTER & CO ansprechen

von entwickler72 » Sa, 23.07.2011 15:52

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

Re: Mit VB.NET PLATZHALTER & CO ansprechen

von Axel Richter » Sa, 23.07.2011 10:01

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

von Axel Richter » Sa, 23.07.2011 09:48

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

von entwickler72 » Fr, 22.07.2011 22:48

: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

Re: Mit VB.NET PLATZHALTER & CO ansprechen

von entwickler72 » Fr, 22.07.2011 22:24

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

von Axel Richter » Fr, 22.07.2011 18:19

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

Mit VB.NET PLATZHALTER & CO ansprechen

von entwickler72 » Do, 21.07.2011 21:15

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

Nach oben