felder per Makro in Text umwandeln
Moderator: Moderatoren
felder per Makro in Text umwandeln
Hallo,
ich habe einen recht ungewöhnliches Problem, wo ich nicht weiterkomme.
Ich erstelle ein Dokument automatisiert, indem ich den Inhalt einer mysql in Felder schreibe (Einfügen-Feldbefehl-weiterer Feldbefehl).
Ich nutze den Inhalt der Felder auch für einiges, z.B. Dateinamenerzeugung beim Speichern,...
Nun würde ich gerne ein Makro schreiben, welches alle Felder löscht, deren Inhalt aber im Dokument als Text lässt. Händisch kann ich ja ein Feld markieren, kopieren, als unformatierter Text einfügen. Geht das auch irgendwie per Makro oder über eine Funktion für alle Felder gleichzeitig?
vg
christian
ich habe einen recht ungewöhnliches Problem, wo ich nicht weiterkomme.
Ich erstelle ein Dokument automatisiert, indem ich den Inhalt einer mysql in Felder schreibe (Einfügen-Feldbefehl-weiterer Feldbefehl).
Ich nutze den Inhalt der Felder auch für einiges, z.B. Dateinamenerzeugung beim Speichern,...
Nun würde ich gerne ein Makro schreiben, welches alle Felder löscht, deren Inhalt aber im Dokument als Text lässt. Händisch kann ich ja ein Feld markieren, kopieren, als unformatierter Text einfügen. Geht das auch irgendwie per Makro oder über eine Funktion für alle Felder gleichzeitig?
vg
christian
Re: felder per Makro in Text umwandeln
Ja, aber nur wenn man weiß um was für Feldtypen es sich GANZ GENAU handelt.Geht das auch irgendwie per Makro oder über eine Funktion für alle Felder gleichzeitig?
Sollte es nur um Seriendruckfelder gehen, sollte Folgendes reichen:
Code: Alles auswählen
Sub Main
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
tmp = oField.CurrentPresentation
oField.getAnchor.String = tmp
Loop
End Sub
Gruß
Stephan
Re: felder per Makro in Text umwandeln
Hallo Stephan,
vielen Dank für die Antwort. Der Codeschnipsel tut nicht, wahrscheinlich falsche Feldtypen.
Ich nutze Datumsfelder, Bedingte Textfelder (Datenbankinhalt a führt zu Text b) und direkte Ausgabe der Datenbankinhalte (zB Adresse).
Wie kann ich denn den Feldtypen abfragen/herausfinden?
VG
Christian
vielen Dank für die Antwort. Der Codeschnipsel tut nicht, wahrscheinlich falsche Feldtypen.
Ich nutze Datumsfelder, Bedingte Textfelder (Datenbankinhalt a führt zu Text b) und direkte Ausgabe der Datenbankinhalte (zB Adresse).
Wie kann ich denn den Feldtypen abfragen/herausfinden?
VG
Christian
Re: felder per Makro in Text umwandeln
lass sie Dir anzeigen mit:Wie kann ich denn den Feldtypen abfragen/herausfinden?
Code: Alles auswählen
Sub Main
Dim alle()
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If UBOUND(alle()) = -1 Then
Redim alle(0)
alle(0) = oField.SupportedServiceNames(0)
Else
gefunden = 0
For i = 0 To UBOUND(alle())
If alle(i) = oField.SupportedServiceNames(0) Then
gefunden = 1
Exit For
End If
Next i
If gefunden = 0 Then
tmp = UBOUND(alle())
Redim Preserve alle(tmp+1)
alle(tmp+1) = oField.SupportedServiceNames(0)
End If
End If
Loop
For i = 0 to UBOUND(alle())
k = k & alle(i) & CHR(13)
Next i
Msgbox k
End Sub
Stephan
Re: felder per Makro in Text umwandeln
Hallo Stephan,
ein weiterer Dank.
Habe anscheinend doch mehr als gedacht
com.sun.star.text.TextField.DateTime
com.sun.star.text.TextField.PageNumber
com.sun.star.text.TextField.ConditionalText
com.sun.star.text.TextField.PageCount
com.sun.star.text.TextField.ExtendedUser
com.sun.star.text.TextField.Database
com.sun.star.text.TextField.User
Aber alles TextField. Somit sollte doch Dein Codeschnipsel tun, oder?
vg
ein weiterer Dank.
Habe anscheinend doch mehr als gedacht
com.sun.star.text.TextField.DateTime
com.sun.star.text.TextField.PageNumber
com.sun.star.text.TextField.ConditionalText
com.sun.star.text.TextField.PageCount
com.sun.star.text.TextField.ExtendedUser
com.sun.star.text.TextField.Database
com.sun.star.text.TextField.User
Aber alles TextField. Somit sollte doch Dein Codeschnipsel tun, oder?
vg
Re: felder per Makro in Text umwandeln
Nein, die Felder werden nicht alle gleich behandelt.Aber alles TextField. Somit sollte doch Dein Codeschnipsel tun, oder?
Das hier wandelt spezifisch nur die Datenbank-Felder in Text um (darum geht es Dir doch weiterhin?):
Code: Alles auswählen
Sub Main2()
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.supportsService("com.sun.star.text.TextField.Database") Then
tmp = oField.CurrentPresentation
oField.getAnchor.String = tmp
End If
Loop
End Sub
Stephan
Re: felder per Makro in Text umwandeln
hmmm, nun kommt
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: CurrentPresentation"
Re: felder per Makro in Text umwandeln
CurrentPresentation ist der aktuell im Datenbank-Feld sichtbare Text. Ich habe nicht die geringste Ahnung weshalb da jetzt eine Fehlermeldung kommt.
1.
nenne Deine genaue OpenOffice- oder LibreOffice-Programmversion
2.
Lade einen Screenshot dieses Meldungsfensters hoch:
Gruß
Stephan
1.
nenne Deine genaue OpenOffice- oder LibreOffice-Programmversion
2.
Lade einen Screenshot dieses Meldungsfensters hoch:
Code: Alles auswählen
Sub Main2()
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.supportsService("com.sun.star.text.TextField.Database") Then
Msgbox oField.dbg_properties
Exit Sub
End If
Loop
End Sub
Stephan
Re: felder per Makro in Text umwandeln
vielen Dank für Deine Mühen, das meine ich wirklich so.
hier der Output
Build-ID: 686f202eff87ef707079aeb7f485847613344eb7
CPU-Threads: 8; BS-Version: Windows 6.2; UI-Render: Standard; Layout-Engine: neu;
Gebietsschema: de-DE (de_DE); Calc: group
hier der Output
LibreOffice Version: 5.3.6.1Properties of object "SwXTextField":
SbxBOOL IsVisible;
SbxLONG AnchorType;
SbxLONG TextWrap;
SbxARRAY AnchorTypes;
SbxLONG NumberFormat;
SbxSTRING Content;
SbxSTRING CurrentPresentation;
SbxBOOL DataBaseFormat;
SbxSTRING FieldCode;
SbxINTEGER IsFieldDisplayed;
SbxSINGLE IsFieldUsed;
SbxOBJECT Anchor;
SbxOBJECT TextFieldMaster;
SbxSTRING ImplementationName;
SbxARRAY SupportedServiceNames;
SbxOBJECT PropertySetInfo;
SbxARRAY Types;
SbxARRAY ImplementationId;
SbxSTRING Dbg_SupportedInterfaces;
SbxSTRING Dbg_Properties;
SbxSTRING Dbg_Methods
Build-ID: 686f202eff87ef707079aeb7f485847613344eb7
CPU-Threads: 8; BS-Version: Windows 6.2; UI-Render: Standard; Layout-Engine: neu;
Gebietsschema: de-DE (de_DE); Calc: group
Re: felder per Makro in Text umwandeln
das war zu ahnenLibreOffice
naja, dann ist es "Content"hier der Output
(wieder mal 'tolle' Leistung von LO, Motto: "Raider ... äh "CurrentPresentation" heißt jetzt "Content", sonst ändert sich nix" - genauer gesagt, gibt es beide Eigenschaften schon immer, nur offensichtlich ist plötzlich die Funktion anders und man fragt sich warum. Offiziell dokumentiert ist nichts für LO 5.3.x und in LO 5.1.x funktioniert CurrentPresentation noch, siehe: https://api.libreoffice.org/docs/idl/re ... f749e5daf9 (wie auch bei OpenOffice (alle Versionen) siehe: https://www.openoffice.org/api/docs/com ... esentation))
Es sollte somit funktionieren:
Code: Alles auswählen
Sub Main2()
oEnum = ThisComponent.getTextFields().createEnumeration()
Do While oEnum.hasMoreElements()
oField = oEnum.nextElement()
If oField.supportsService("com.sun.star.text.TextField.Database") Then
tmp = oField.Content
oField.getAnchor.String = tmp
End If
Loop
End Sub
Stephan
Re: felder per Makro in Text umwandeln
vielen Dank, nun tut es