Seite 1 von 1

Zeile nach Absatz löschen

Verfasst: Di, 13.07.2010 18:57
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

Re: Zeile nach Absatz löschen

Verfasst: Mi, 14.07.2010 06:33
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" :)

Re: Zeile nach Absatz löschen

Verfasst: Mi, 14.07.2010 07:29
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.

Re: Zeile nach Absatz löschen

Verfasst: Mi, 14.07.2010 18:02
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

Re: Zeile nach Absatz löschen

Verfasst: Di, 28.12.2010 15:41
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