Zeile nach Absatz löschen

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

Moderator: Moderatoren

eisbaer11
*
Beiträge: 15
Registriert: Mo, 14.11.2005 10:24

Zeile nach Absatz löschen

Beitrag von eisbaer11 »

Hallo liebe Foriker,

nach langer Zeit wieder mal hier in der Hoffnung auf Hilfe. Ich habe mir diverse Formatierungsmakros gemacht. Diese liefen bisher auch problemlos. Habe nunmehr ein Update auf die Version 3.2.0 gemacht. Seitdem stolpert er über folgendes Passage:

[Moderation,4: CODE-tags gesetzt; Fehlerzeile ist die mit "Zwischenüberschrift"]

Code: Alles auswählen

rem zum Doc-Anfang gehen und Iterationsschleife über die Absätze definieren
tcursor.gotostart(false)
Do while enum.hasMoreElements
	absatz = enum.nextElement
	tcursor.gotonextparagraph(false)
rem Zeile nach bestimmten löschen durch Markierung der
rem Absatzmarke des betreffenden Absatzes und Ersatz durch nichts
	if absatz.supportsService("com.sun.star.text.Paragraph") Then
        if absatz.parastylename = "Zwischenüberschrift" Then
			tcursor.gotoendofparagraph(false)
			tcursor.goright(1,true)
			document.text.insertstring(tcursor,"",true)
		end if
	end if
loop
Dass Makro sucht also ab Dok-Anfang Absätze, die mit der Formatvorlage "Zwischenüberschrift" versehen sind, setzt den Cursor in die nächste Zeile und löscht diese. Momentan bricht das Makro mit einer Fehlermeldung bei der markierten Zeile ab.
Hat jemand einen Tip, was da momentan nicht funktioniert? Hat sich was beim versionswechsel geändert?

Danke und Gruß
Volkmar
Viele Grüße
Volkmar, der mit Oo 4.1.3 unter Win7 arbeitet
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zeile nach Absatz löschen

Beitrag von komma4 »

eisbaer11 hat geschrieben:Habe nunmehr ein Update auf die Version 3.2.0 gemacht.
Wie wäre es zunächst mit einem Update auf die aktuelle Version 3.2.1 (Windows, nehme ich an)?!
Im Issuetracker habe ich nichts zu Deinem Problem gefunden...

btw: Deine Signatur hängt dann auch ein bissel nach, "2.3" :)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zeile nach Absatz löschen

Beitrag von komma4 »

Anmerkung zu Deinem Code:

* Du verwendest enum als Variablennamen ... zumindest unglücklich, wenn auch nicht verboten, da es sich um ein BASIC-Schlüsselwort handelt
setzt den Cursor in die nächste Zeile und löscht diese
* Nein, der Code löscht die folgende Absatzmarke... nicht die Zeile/den Paragraphen.


Nett wäre es auch, wenn Du zum Testen für andere die notwendigen Definitionszeilen mitliefern würdest... das musste ich ergänzen:

Code: Alles auswählen

document = ThisComponent
oText = document.Text
tcursor = oText.createTextCursor()
enum  = oText.createEnumeration()
um festzustellen, dass der Code so unter 3.0.1 (immer) noch läuft.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
eisbaer11
*
Beiträge: 15
Registriert: Mo, 14.11.2005 10:24

Re: Zeile nach Absatz löschen

Beitrag von eisbaer11 »

Hallo Winfried,

OpenOffice und Signatur sind nun up to date :D

Geändert hat sich aber nichts, das Makro hängt weiter in der bewußten Zeile. Hänge auch noch mal den kompletten Codes des Subs dran.

Code: Alles auswählen

sub Loesche_Folgezeile_Z

rem define variables
dim document	as object
dim enum		as object
dim objText		as object
dim absatz		as object
dim tcursor		as object

rem get access to the document
document = ThisComponent
objText = document.text
enum = objText.createEnumeration
tcursor = ThisComponent.Text.createTextCursor()

rem zum Doc-Anfang gehen und Iterationsschleife über die Absätze definieren
tcursor.gotostart(false)
Do while enum.hasMoreElements
	absatz = enum.nextElement
	tcursor.gotonextparagraph(false)
rem Zeile nach bestimmten löschen durch Markierung der
rem Absatzmarke des betreffenden Absatzes und Ersatz durch nichts
	if absatz.supportsService("com.sun.star.text.Paragraph") Then
		if absatz.parastylename = "Zwischenüberschrift" Then
			tcursor.gotoendofparagraph(false)
			tcursor.goright(1,true)
			document.text.insertstring(tcursor,"",true)
		end if
	end if
loop

end sub
Viele Grüße
Volkmar, der mit Oo 4.1.3 unter Win7 arbeitet
eisbaer11
*
Beiträge: 15
Registriert: Mo, 14.11.2005 10:24

Re: Zeile nach Absatz löschen

Beitrag von eisbaer11 »

Hallo liebe Forengemeinde,

ich konnte nunmehr das Problem lösen. Ich habe die Zeile

if absatz.parastylename = "Zwischenüberschrift" Then

geändert in

if tcursor.parastylename = "Zwischenüberschrift" Then

und schon klappt das Makro wieder
Viele Grüße
Volkmar, der mit Oo 4.1.3 unter Win7 arbeitet
Antworten