Seite 1 von 1
Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 12:40
von MikeRo
Hallo, ich finde nicht so recht einen Ansatz.
Ich fange gerade an ein neues Makro zu schreiben. Dieses mal muss ich ein Angebot in einem Writer Dokument erstellen. Es gibt eine Vorlage die ich nutze und in der an bestimmten stellen aus der Datenbank Daten eingefügt werden müssen (Adresse, Ansprechpartner etc...) Bei Calc Dokumenten ist das ja absolut kein Problem, aber wie mache ich es bei Writer Dokumenten? Muss ich mir Marken Setzen, und dann diese dann mit einem suchen und ersetzen Makro mit den Daten überspielen? Oder wie kann ich sonst auf die entsprechenden Stellen zugreifen? Immerhin habe ich ja nicht einfach nur Adressen wie bei Calc.
Vielen dank schon mal für jeden Tipp.
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 12:48
von DPunch
Aloha
Der Weg, den ich bei derlei Dingen empfehlen würde, ist der über Platzhalter (Placeholder), die den gleichen Namen wie die korrespondierenden Datenbankspalten tragen.
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 12:53
von MikeRo
Okay, dann lege ich mir Platzhalter ins Dokument und ersetze diese mit der replace Funktion.
Aber was ist, wenn der Text eine bestimmte Formatierung haben muss?
Wird die Formatierung beim ersetzen übernommen?
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 13:35
von DPunch
Aloha
Du kannst die Platzhalter nach Belieben formatieren, da geht nichts verloren.
Nicht per "Replace" ersetzen, sondern per Placeholder.Anchor.String.
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 14:03
von MikeRo
Ich habe es nun so gelöst.
Code: Alles auswählen
Sub AB_FK_AdressdatenEinfuegen
globalScope.BasicLibraries.loadLibrary("Tools")
dim aPlatzhalter() 'LIste der Platzhalter
aPlatzhalter = array("<$Adressdaten1$>")
dim aInhalt(uBound(aPlatzhalter)) 'Liste der zu ersetzenden Texte
rem---DB Abfrage der Adressdaten
Call AB_FK_SQL
oStatement = oCon.createStatement()
oResult = oStatement.executeQuery(AB_SQL_Adresskopf)
IF NOT ISNULL(oResult) THEN
Do while oResult.Next
VAR_Abfragedaten = oResult.getString(1) & chr(10) &_
oResult.getString(2) & chr(10 &_
oResult.getString(3) & chr(10) &_
oResult.getString(4)
Loop
End If
aInhalt(0) = VAR_Abfragedaten
REM Eintragen der Inhalte
for i = 0 to uBound(aPlatzhalter())
AB_FK_trageEin(oDoc, aInhalt(i), aPlatzhalter(i)
next
End Sub
Code: Alles auswählen
Sub AB_FK_trageEin(oDoc as object, sNeuTxt as string, sPlatzhalter as string)
oSuche = oDoc.createReplaceDescriptor()
with oSuche
.setSearchString(sPlatzhalter)
.setReplaceString(sNeuTxt)
end with
oDoc.replaceAll(oSuche)
End Sub
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Di, 20.12.2011 22:34
von DPunch
Aloha
Das ist auch eine Möglichkeit, ersetzt Dir aber alle Vorkommen, ob nun relevante Felder oder nicht.
Zudem bietet sich z.B. nicht die einfache Möglichkeit, z.B. Platzhalter für Bilder zu definieren.
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Mi, 21.12.2011 11:17
von MikeRo
Platzhalter einfügen ist ja kein Problem. Aber wie spreche ich diese an und ersetze Sie?
Speziell bei Grafiken?
Re: Writer Dokument Bearbeiten und Texte einfügen?
Verfasst: Mi, 21.12.2011 12:54
von DPunch
Aloha
Code: Alles auswählen
enumTextFields = thisComponent.TextFields.createEnumeration
Do While enumTextFields.hasMoreElements
thisTextField = enumTextFields.NextElement
If thisTextField.supportsService("com.sun.star.text.textfield.JumpEdit") Then
'REM Platzhalter gefunden
End If
Loop
Loop