Jump to content

Makros/Basis/Calc/Bereiche

From The Document Foundation Wiki
This page is a translated version of the page Macros/Basic/Calc/Ranges and the translation is 100% complete.

Return to Index

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
    For Each service In selection.SupportedServiceNames
        MsgBox service
    Next service

ACHTUNG: die aktuelle Auswahl kann vieles sein. Für eine eindeutige Bestimmung siehe unter supportsService method.

Auswahl bestätigter Service Name
Zelle com.sun.star.sheet.SheetCell
Bereich com.sun.star.sheet.SheetCellRange
Bereiche com.sun.star.sheet.SheetCellRanges
Spalten com.sun.star.table.TableColumns
Zeilen com.sun.star.table.TableRows
Umriss com.sun.star.drawing.ShapeCollection


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)