Löschen von Zellen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Löschen von Zellen

von mike6 » Di, 06.06.2006 10:12

Hallo Thomas,

1000 - Dank.

:D - :D - :D


mfg
mik6

von Toxitom » Di, 06.06.2006 08:12

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!

von mike6 » Di, 06.06.2006 08:00

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

von Toxitom » Mo, 05.06.2006 10:23

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

Löschen von Zellen

von mike6 » Mo, 05.06.2006 09:28

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

Nach oben