Makros/Basis/Calc/Bereiche
< Macros | Basic/Calc
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Spende
Bereiche
Zelle über den Namen holen
sheet = ThisComponent.CurrentController.ActiveSheet
cell = sheet.getCellRangeByName("A1")
Zelle über die Position holen
sheet = ThisComponent.CurrentController.ActiveSheet
'Cell C6
column = 2
row = 5
cell = sheet.getCellByPosition(column, row)
Bereich über den Namen holen
sheet = ThisComponent.CurrentController.ActiveSheet
range = sheet.getCellRangeByName("B5:D10")
Bereich über die Position holen
sheet = ThisComponent.CurrentController.ActiveSheet
'Range B5:D10
start_column = 1
start_row = 4
end_column = 3
end_row = 9
range = sheet.getCellRangeByPosition(start_column, start_row, end_column, end_row)
Adresse als Text holen
sheet = ThisComponent.CurrentController.ActiveSheet
cell = sheet.getCellRangeByName("B2")
range = sheet.getCellRangeByName("B2:C5")
Msgbox cell.AbsoluteName
Msgbox range.AbsoluteName
Adresse als Struktur holen
- nur für Zellen
sheet = ThisComponent.CurrentController.ActiveSheet
cell = sheet.getCellRangeByName("B2")
address = cell.CellAddress
Msgbox address.Column
Msgbox address.Row
- für Bereiche
sheet = ThisComponent.CurrentController.ActiveSheet
range = sheet.getCellRangeByName("B2:C5")
address = range.RangeAddress
Msgbox address.StartColumn
Msgbox address.StartRow
Msgbox address.EndColumn
Msgbox address.EndRow
Bereichsgruppen
- Bereiche erzeugen und hinzufügen
doc = ThisComponent
sheet = doc.CurrentController.ActiveSheet
group = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
range1 = sheet.getCellRangeByName("A1:B2")
range2 = sheet.getCellRangeByName("D5:F10")
range3 = sheet.getCellRangeByName("H15:J20")
group.addRangeAddress(range1.RangeAddress, False)
group.addRangeAddress(range2.RangeAddress, False)
group.addRangeAddress(range3.RangeAddress, False)
MsgBox group.RangeAddressesAsString
- Wir können ein Feld verwenden
ranges = Array(range1.RangeAddress, range2.RangeAddress, range3.RangeAddress)
group.addRangeAddresses(ranges, False)
- Entfernen
group.removeRangeAddress(range2.RangeAddress)
Spalten
- Zählen
sheet = ThisComponent.CurrentController.ActiveSheet
range = sheet.getCellRangeByName("D5:F10")
MsgBox range.Columns.Count
- über den Index holen
MsgBox range.Columns(0).Name
- über den Namen holen
MsgBox range.Columns("E").Name
Zeilen
- Zählen
sheet = ThisComponent.CurrentController.ActiveSheet
range = sheet.getCellRangeByName("D5:F10")
MsgBox range.Rows.Count
- über den Index holen
MsgBox range.Rows(1).AbsoluteName
aktuelle Auswahl
selection = ThisComponent.CurrentSelection
MsgBox selection.ImplementationName
ACHTUNG:die aktuelle Auswahl kann vieles sein.
Auswahl | ImplementationName |
---|---|
Zelle | ScCellObj |
Bereich | ScCellRangeObj |
Bereiche | ScCellRangesObj |
Spalten | ScTableColumnsObj |
Zeilen | ScTableRowsObj |
Umriss | com.sun.star.drawing.SvxShapeCollection |
Bereich mit Name
- Namen bearbeiten Strg+F3
sheet = ThisComponent.CurrentController.ActiveSheet
range = sheet.getCellRangeByName("Address")
MsgBox range.AbsoluteName
- Zählen
names = ThisComponent.NamedRanges
MsgBox names.Count
- über den Index holen
range = names(0)
MsgBox range.Name
- über den Namen holen
range = names("Address")
MsgBox range.Name
- neue hinzufügen
sheet = ThisComponent.CurrentController.ActiveSheet
cell = sheet.getCellRangeByName("A1")
names = ThisComponent.NamedRanges
flag = 0
names.addNewByName("NewData", "$A$1:$B$7", cell.CellAddress, flag)
Für flags siehe: NamedRangeFlag
- Entfernen
names.removeByName("NewData")
- Export Liste
names.outputList(cell.CellAddress)
Cursor
- über den Bereich erzeugen
sheet = ThisComponent.CurrentController.ActiveSheet
cell = sheet.getCellRangeByName("A1")
cursor = sheet.createCursorByRange(cell)
MsgBox cursor.ImplementationName
- zur nächsten Zelle wechseln
cursor.gotoNext()
- zur vorherigen Zelle wechseln
cursor.gotoPrevious()
- Wechseln nach (Spalte, Zeile)
cursor.gotoOffset(2, 5)
- Wechseln an den Start
cursor.gotoStart()
- Wechseln ans Ende
cursor.gotoEnd()
- Erweitern auf die aktuelle Region
cursor.collapseToCurrentRegion()
Tipp: die letzte angesprochene Zeile im Bereich holen
cursor.gotoEnd()
MsgBox cursor.RangeAddress.EndRow
'Or
cursor.collapseToCurrentRegion()
MsgBox cursor.RangeAddress.EndRow
- Erweitern auf das aktuelle Feld
cursor.collapseToCurrentArray()
- Erweitern auf ein zusammenhängendes Gebiet
cursor.collapseToMergedArea()
- Erweitern auf ganze Spalten
cursor.expandToEntireColumns()
- Erweitern auf ganze Zeilen
cursor.expandToEntireRows()
- Größe des Bereiches ändern
columns = 2
rows = 5
cursor.collapseToSize(columns, rows)
- Wechseln zum Start des aktuellen Bereiches
cursor.gotoStartOfUsedArea(False)
- Wechseln zum Ende des aktuellen Bereiches
cursor.gotoEndOfUsedArea(False)
Argument zur Erweiterung (true) oder nicht (false) der Bereichsauswahl.
Spezielle Auswahlen
Tipp: alle folgenden Methoden erhalten immer eine Gruppe an Bereichen (ScCellRangesObj)
- sichtbare Zellen holen
selection = ThisComponent.CurrentSelection
ranges = selection.queryVisibleCells()
- leere Zellen holen
selection = ThisComponent.CurrentSelection
ranges = selection.queryEmptyCells()
- Zellen mit Text holen
selection = ThisComponent.CurrentSelection
ranges = selection.queryContentCells(com.sun.star.sheet.CellFlags.STRING)
Siehe flag options: CellFlags
Tipp: mehrere Werte können aufaddiert werden.
- Zellen mit Fehlern in der Formel holen
selection = ThisComponent.CurrentSelection
ranges = selection.queryFormulaCells(com.sun.star.sheet.FormulaResult.ERROR)
Siehe flag options: FormulaResult
- Werte aus unterschiedlichen Spalten holen.
selection = ThisComponent.CurrentSelection
source = selection.getCellByPosition(0, 0)
ranges = selection.queryColumnDifferences(source.CellAddress)
- Werte aus unterschiedlichen Zeilen holen.
selection = ThisComponent.CurrentSelection
source = selection.getCellByPosition(0, 0)
ranges = selection.queryRowDifferences(source.CellAddress)
- direkt adressierte Zellen holen
sheet = ThisComponent.CurrentController.ActiveSheet
range1 = sheet.getCellRangeByName("B2:I11")
range2 = sheet.getCellRangeByName("G8:N17")
ranges = rango1.queryIntersection(rango2.RangeAddress)
Arbeiten mit Bereichen
Kopieren
sheet = ThisComponent.CurrentController.ActiveSheet
source = sheet.getCellRangeByName("A1:B3")
target = sheet.getCellRangeByName("D10")
sheet.copyRange(target.CellAddress, source.RangeAddress)
Es können Spalten oder Zeilen kopiert werden. Die Zielzelle ist die erste Zelle.
source_columns = sheet.Columns(2)
source_rows = sheet.Rows(1)
target_column = sheet.getCellRangeByName("H1") 'First row
target_row = sheet.getCellRangeByName("A20") 'First column
Verschieben
sheet = ThisComponent.CurrentController.ActiveSheet
source = sheet.getCellRangeByName("A1:B3")
target = sheet.getCellRangeByName("D10")
sheet.moveRange(target.CellAddress, source.RangeAddress)
Einfügen
- Einfügen und Zellen nach unten schieben
sheet = ThisComponent.CurrentController.ActiveSheet
target = CreateUnoStruct("com.sun.star.table.CellRangeAddress")
With target
.Sheet = sheet.RangeAddress.Sheet
.StartColumn = 1
.StartRow = 1
.EndColumn = 3
.EndRow = 3
End With
sheet.insertCells(target, com.sun.star.sheet.CellInsertMode.DOWN)
Für andere Optionen siehe: CellInsertMode
- Spalten einfügen
sheet = ThisComponent.CurrentController.ActiveSheet
start = 4
columns = 2
sheet.Columns.insertByIndex(start, columns)
- Zeilen einfügen
sheet = ThisComponent.CurrentController.ActiveSheet
start = 2
rows = 5
sheet.Rows.insertByIndex(start, rows)
Löschen
- Löschen und Zellen hochziehen
sheet = ThisComponent.CurrentController.ActiveSheet
selection = ThisComponent.CurrentSelection
sheet.removeRange(selection.RangeAddress, com.sun.star.sheet.CellDeleteMode.UP)
Für andere Optionen siehe: CellDeleteMode
- Spalten löschen
sheet = ThisComponent.CurrentController.ActiveSheet
start = 0
columns = 2
sheet.Columns.removeByIndex(start, columns)
- Zeilen löschen
sheet = ThisComponent.CurrentController.ActiveSheet
start = 9
rows = 3
sheet.Rows.removeByIndex(start, rows)