Löschen von Zellen

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

Moderator: Moderatoren

mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Löschen von Zellen

Beitrag von mike6 »

Hallo,

1.)

ich habe mir ein Makro aufgezeichnet, das z.B. den
Inhalt der Zellen A2 ; B3, C4:C25 usw löscht.
Geht der Dispatchercode auch schlanker ?

2.)

ich habe verschieden Tabellenblätter mit verschiedenem Inhalt.
Bei allen Tabellenblättern ist die Überschrift in dem Bereich
der Zeilen 1 und 2.

Wie kann ich den Inhalt der verschiedenen Tabellenblätter
dynamisch löschen.
Das Makro soll alles ab Zeile A3 bis zum Ende des jeweils
letzten Eintrags löschen.


mfg
mike6
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Mike,
Geht der Dispatchercode auch schlanker ?
Wer soll das wissen, wenn du den Code nicht postest?
Im allgemeinen: Dispatchercode: Nein!
Nativ Code: wahrscheinlich ja. Ist aber ein komplett anderer Ansatz.
Das Makro soll alles ab Zeile A3 bis zum Ende des jeweils
letzten Eintrags löschen.
Na, über Schleifen machbar. Über alle Tabellenblätter, dann pro Tabellenblatt eine CellCursor erzeugen, diesen mit der Methode gotoEndOfUsedArea() auf die letzte benutzte Zelle setzen, Zelladresse auslesen, Zellbereich definieren (von A3 bis ...), Bereich löschen mit ClearContents((), wobei eben ein Flag übergeben werden muss, was denn alles gelöscht werden soll. Nachzulesen ibei com.sun.star.sheet.CellFlags : Für Werte, Datumswerte, Texte, Notizen und Kommentare, Formeln und "harte" Formatierungen ergibt sich : 63, Willst du auch Zellformate löschen, addiere nochmals 64 hinzu, Für Zeichnungen (Teile der Drawpage) weitere 128.

Na, denn mal los ;-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Beitrag von mike6 »

Hallo,

ich habe da was gefunden, es funktioniert auch.

***********************************************
Sub zellInhalteLoeschen
' Variablen deklarieren
Dim oCalcDokument as Object
Dim oTabellenblatt as Object
Dim oZelle as Object
Dim oZellAdresse as Object
Dim nInhaltsTypen as Long

' aktuelles Dokument holen
oCalcDokument = ThisComponent
' erstes Tabellenblatt holen
oTabellenblatt = oCalcDokument.Sheets(0)
' Zelle A1 liegt auf Position 0,0
oZelle = oTabellenblatt.getCellByPosition( 0, 0 )' A1

' addieren der Zellinhaltstypen, die gelöscht werden sollen
nInhaltsTypen = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.VALUE + _
com.sun.star.sheet.CellFlags.FORMULA

' löschen über com.sun.star.sheet.XSheetOperation
oZelle.clearContents( nInhaltsTypen )
End Sub

***********************************************

Wie füge ich aber die Bereiche
A2 ; B3, C4:C25
hinzu ?


mfg
mike6
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Mike,

na, indem du statt der einen Zelle einen Array mit Zellbereichen definierst und dann eine Schleife darüber laufen läst ;-)

Hab den Code mal dementsprechend modifiziert:

Code: Alles auswählen

REM  *****  BASIC  *****
Sub zellInhalteLoeschen
' Variablen deklarieren
Dim oCalcDokument as Object
Dim oTabellenblatt as Object
Dim oZellbereich as Object
Dim oZellAdresse as Object
Dim nInhaltsTypen as Long
Dim aZelle()

' aktuelles Dokument holen
oCalcDokument = ThisComponent
' erstes Tabellenblatt holen
oTabellenblatt = oCalcDokument.Sheets(0)
' Zellebereichsarry definieren
aZelle = array("A1", "A2", "C4:C25")
' addieren der Zellinhaltstypen, die gelöscht werden sollen
nInhaltsTypen = com.sun.star.sheet.CellFlags.STRING + _
com.sun.star.sheet.CellFlags.VALUE + _
com.sun.star.sheet.CellFlags.FORMULA
'Schleife über die Zellbereiche
for i = 0 to ubound(aZelle())
	oZellbereich = oTabellenblatt.getCellRangeByName(aZelle(i))
' löschen über com.sun.star.sheet.XSheetOperation
	oZellbereich.clearContents( nInhaltsTypen )
next

End Sub
Den Zellbereichsarray kannst du natürlich beliebig erweiteren - mit weiteren Zellen oder Zellbereichen.

Gruss
Thomas

PS: Aktuell löschst du nur die Inhalte (also Texte, Zahlen und Formeln) - nicht die Zellformatierungen!
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mike6
*****
Beiträge: 479
Registriert: Sa, 06.03.2004 13:58

Beitrag von mike6 »

Hallo Thomas,

1000 - Dank.

:D - :D - :D


mfg
mik6
Antworten