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
Löschen von Zellen
Moderator: Moderatoren
Hey Mike,
Im allgemeinen: Dispatchercode: Nein!
Nativ Code: wahrscheinlich ja. Ist aber ein komplett anderer Ansatz.
Na, denn mal los
Gruss
Thomas
Wer soll das wissen, wenn du den Code nicht postest?Geht der Dispatchercode auch schlanker ?
Im allgemeinen: Dispatchercode: Nein!
Nativ Code: wahrscheinlich ja. Ist aber ein komplett anderer Ansatz.
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.Das Makro soll alles ab Zeile A3 bis zum Ende des jeweils
letzten Eintrags löschen.
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
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
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:
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!
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
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
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic