Hallo Fred,
ich habe da etwas liegen gehabt, das hier gepostet wurde - gleiches
Problem:
http://www.libreoffice-forum.de/viewtopic.php?f=10&t=14988&sid=e3879a86d8d8b781c054fddc6e5d362c#p35780
Daraus habe ich jetzt den Code so übernommen, dass er auch zu dem
passt, was ich im Handbuch hinterlegt habe. Hier jetzt einfach einmal
der gesamte Code zum Füllen der Textfelder mit Löschmöglichkeit, wenn
ein Textfeld keinen Inhalt hat:
- ---------------
SUB Textfelder_Fuellen
'Zuerst muss im Writer eine Vorlage mit Platzhaltern erstellt werden.
'Einfügen → Feldbefehl → Funktionen → Platzhalter
'Den Platzhalter so nennen, wie die entsprechende Spalte in der
Tabelle / in der Abfrage heißt, deren Inhalt der Platzhalter annehmen
soll.
'Für einfache Zwecke einfach nur "Text" als Typ wählen, mit den
anderen Varianten, z.B. "Grafik" kann man dann fortgeschrittenere
Sachen umsetzen.
'In dem Makro Pfad zur Vorlage hinterlegen und vom Makro die
Platzhalter befüllen lassen.
'Es wird ein neues Dokument gegründet, das direkt mit den Inhalten
gefüllt wird.
'Das Dokument wird geöffnet, ist noch nicht gespeichert.
DIM oForm AS OBJECT
DIM oColumns AS OBJECT
DIM oDB AS OBJECT
DIM oNewDoc AS OBJECT
DIM oTextfields AS OBJECT
DIM oTextfield AS OBJECT
DIM oViewCursor AS OBJECT
DIM stColumnname AS STRING
DIM stDir AS STRING
DIM stContent AS STRING
DIM inIndex AS INTEGER
oForm = thisComponent.Drawpage.Forms.MainForm 'Das Hauptformular wird
angesteuert. Hier könnte auch die Lage des auslösenden Buttons das
Formular selbst ermitteln.
oColumns = oForm.Columns
oDB = ThisComponent.Parent ' Der Zugriff auf die URL ist nicht vom
Formular aus direkt möglich. Es muss auf den darüberliegenden Frame
der Datenbank Bezug genommen werden.
stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title)) ' Der
Titel der Datenbank wird von der URL abgetrennt.
stDir = stDir & "Beispiel_Textfelder.ott"
REM Vorlage öffnen
DIM args(0) AS NEW com.sun.star.beans.PropertyValue
args(0).Name = "AsTemplate"
args(0).Value = True
oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)
REM Textfelder holen
oViewCursor = oNewDoc.CurrentController.getviewCursor()
oTextfields = oNewDoc.Textfields.createEnumeration
DO WHILE oTextfields.hasMoreElements
oTextfield = oTextfields.nextElement
IF
oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
stColumnname = oTextfield.PlaceHolder 'Placeholder ist Benennung
für das Textfeld
IF oColumns.hasByName(stColumnname) THEN 'Wenn der Name des
Textfeldes gleich dem Spaltennamen der Daten ist, die dem Formular
zugrunde liegen ...
inIndex = oForm.findColumn(stColumnname)
stContent = oForm.getString(inIndex)
oViewCursor.GotoRange(oTextfield.Anchor,false)
oViewCursor.String = stContent
IF stContent = "" THEN
oViewCursor.goRight (1, true) 'Mit dieser und der folgenden Zeile
wird der Platzhalter und das anschließende Zeichen gelöscht
oViewCursor.String = ""
END IF
END IF
END IF
LOOP
END SUB
- ---------------------------
Ist natürlich schlecht hier heraus zu kopieren. Schau Dir einfach
einmal alle Zeilen an, in der der ViewCursor vorkommt. Der Inhalt wird
jetzt über den Cursor in die Vorlage übertragen, nicht direkt in die
Platzhalter geschrieben.
Gruß
Robert