Makro Zeilen löschen

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

Moderator: Moderatoren

LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Makro Zeilen löschen

Beitrag von LokutusvB »

Hallo,

ich habe das Forum ein wenig durchsucht, konnte aber leider nicht etwas passendes für mich entdecken. Ich möchte mir ein Makro erstellen, was ein Tabellenblatt wie folgt bearbeitet. Es soll von der ersten Zeile aus Zeile für Zeile weiterspringen und nach Inhalt kontrollieren. Ist in der ersten Spalte Inhalt vorhanden, dann springe zur nächsten Zeile. Ist die erste Zeile ohne Inhalt gefunden, lösche alle darüberliegenden Zeilen mit Inhalt.

Wie kann ich das in einem Makro bewerkstelligen?

Viele Grüße
LvB
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro Zeilen löschen

Beitrag von komma4 »

Ist in den anderen Spalten denn Inhalt?

Oder möchtest Du das gesamte Blatt leeren?


Stichwort für die Suche ist UsedArea


Moderation,4: ins zuständige BASIC-Unterforum verschoben
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Makro Zeilen löschen

Beitrag von LokutusvB »

Hallo komma4,

ja, in den anderen Spalten ist auch Inhalt, wenn in der ersten Spalte Inhalt ist. Deswegen möchte ich einfach, wenn in der ersten Spalte Inhalt vorhanden ist, weiterspringen. Ist in der ersten Spalte kein Inhalt, ist die ganze Zeile leer, alles darüber soll gelöscht werden. Unterhalb dieser leeren Zeile ist wieder Inhalt, welcher ja dann automatisch oben stehen sollte. danke für den Tip, werde mir UsedArea anschauen.
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Makro Zeilen löschen

Beitrag von LokutusvB »

Ich sehe schon, das Thema ist wohl im Basic-Bereich besser aufgehoben. Denn was ich benötige, ist ein Basic-Script.

Soll ich das Thema hier im Bereich beenden und im Basic-Forum ein neues eröffnen oder kann irgendwer das Thema verschieben? Danke!!!

Viele Grüße
LvB



Moderation,4: in Basic-Bereich verschoben
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Makro Zeilen löschen

Beitrag von LokutusvB »

Danke für das Verschieben!

Ich bin inzwischen soweit:

Code: Alles auswählen

...
Doc.getSheets.getByIndex(0).getRows.removeByIndex(1,X)
Jetzt habe ich nur noch das Problem, wie ich X ermitteln kann. Ich konnte keine Prüfung finden, ob eine Zeile Inhalt hat oder nicht. Ich könnte auch Zeile für Zeile prüfen und löschen. Nur habe ich bisher nicht finden können, wie ich eine Calc-Zeile auf Inhalt prüfen kann. Wie stelle ich das am geschicktesten an?

Zusatz:
Habe folgendes gefunden:

Code: Alles auswählen

...
... .getCellByPosition(9, X)getString
Das würde ich dann Zeile für Zeile (X) durchsuchen lassen. Geht das auch einfacher?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro Zeilen löschen

Beitrag von komma4 »

Habe in meiner Makrokiste was gefunden und etwas angepasst.

Code: Alles auswählen

Sub de39335
' 2010-06-14

oBlatt = ThisComponent.Sheets().getByName( "Tabelle1" ) 
oBereich = oBlatt.getCellRangeByPosition( 0, 0, 0, 1000 )

oSearchDesc = oBereich.createSearchDescriptor()

With oSearchDesc
 .SearchRegularExpression = True
 .SearchString  = "^."
End With

oFoundAll = oBereich.FindAll( oSearchDesc )


'  oFoundAll.AbsoluteName()
' hat bspw. folgende Rückgabe:
' $Tabelle1.$A$1:$A$4;$Tabelle1.$A$6:$A$8


' Finden des letzten Zelladresse des ersten Bereichs
iDoppelpunkt = Instr( 1, oFoundAll.AbsoluteName(), ":" ) 
iSemikolon = Instr( 1, oFoundAll.AbsoluteName(), ";" ) 

sLetzteZelle = MID( oFoundAll.AbsoluteName(), iDoppelpunkt+1, iSemikolon-iDoppelpunkt-1 )
print "Erster Bereich endet mit Zelle " & sLetzteZelle

End Sub

Kommst Du damit zurecht? Hilft Dir das weiter?
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Makro Zeilen löschen

Beitrag von LokutusvB »

Hallo komma4,

wenn ich nur schon dein Verständnis für OpenOffice Basic hätte :(, dann wäre ich kein Fragesteller mehr, sondern ein Helferlein, so wie du.

Wenn ich das richtig verstehe, durchsuchst du mit Hilfe der regulären Audrücke die Zellen auf Inhalt. Mit Verwendung der String-Manipulation "baust" du dir die Koordinaten zurecht. Das sollte mir weiter helfen. Dieses Vorgehen ist sicherei, als mein Absuchen einzellner Zellen auf Inhalt.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro Zeilen löschen

Beitrag von komma4 »

Richtig:

die suche mit regulärem Ausdruck findet die Bereiche, in denen ein Inhalt vorhanden ist.

"Sicherer" ist das nicht, aber vllt. schneller 8)


Hatte gerade etwas Zeit den Code ums Löschen zu erweitern:

Code: Alles auswählen

iZeilenNr = MID( sLetzteZelle, sZweiterDollar+1, ( Len( sLetzteZelle ) - sZweiterDollar ) )  

print "letzte Zeile ist dann: " & iZeilenNR

Dim oRangeAddress As New com.sun.star.table.CellRangeAddress

With oRangeAddress
 .Sheet = 0
 .StartColumn = 0
 .StartRow = 0 
 .EndColumn = 3 ' Index der letzten Spalte zum Entfernen
 .EndRow = iZeilenNR
End With

oBlatt.removeRange( oRangeAddress, com.sun.star.sheet.CellDeleteMode.UP )


Das klappt hier - wie Du Dir das hoffentlich wünschst.
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)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Makro Zeilen löschen

Beitrag von LokutusvB »

Danke dir für deine Mühe. Schaut für mich sehr gut aus :). Das werde ich in meine Delphi-Bibliothek aufnehmen und testen.

Viele Grüße
LvB
Antworten