felder per Makro in Text umwandeln

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

Moderator: Moderatoren

chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

felder per Makro in Text umwandeln

Beitrag von chrischii »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: felder per Makro in Text umwandeln

Beitrag von Stephan »

Geht das auch irgendwie per Makro oder über eine Funktion für alle Felder gleichzeitig?
Ja, aber nur wenn man weiß um was für Feldtypen es sich GANZ GENAU handelt.

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
chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

Re: felder per Makro in Text umwandeln

Beitrag von chrischii »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: felder per Makro in Text umwandeln

Beitrag von Stephan »

Wie kann ich denn den Feldtypen abfragen/herausfinden?
lass sie Dir anzeigen mit:

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
Gruß
Stephan
chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

Re: felder per Makro in Text umwandeln

Beitrag von chrischii »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: felder per Makro in Text umwandeln

Beitrag von Stephan »

Aber alles TextField. Somit sollte doch Dein Codeschnipsel tun, oder?
Nein, die Felder werden nicht alle gleich behandelt.

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
Gruß
Stephan
chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

Re: felder per Makro in Text umwandeln

Beitrag von chrischii »

hmmm, nun kommt
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: CurrentPresentation"
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: felder per Makro in Text umwandeln

Beitrag von Stephan »

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:

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

Gruß
Stephan
chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

Re: felder per Makro in Text umwandeln

Beitrag von chrischii »

vielen Dank für Deine Mühen, das meine ich wirklich so.

hier der Output
Properties 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
LibreOffice Version: 5.3.6.1
Build-ID: 686f202eff87ef707079aeb7f485847613344eb7
CPU-Threads: 8; BS-Version: Windows 6.2; UI-Render: Standard; Layout-Engine: neu;
Gebietsschema: de-DE (de_DE); Calc: group
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: felder per Makro in Text umwandeln

Beitrag von Stephan »

LibreOffice
das war zu ahnen
hier der Output
naja, dann ist es "Content"

(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

Gruß
Stephan
chrischii
*
Beiträge: 14
Registriert: So, 01.11.2015 10:36

Re: felder per Makro in Text umwandeln

Beitrag von chrischii »

vielen Dank, nun tut es
8) :mrgreen:
Antworten