Seite 1 von 1

Python Fokus auf letzte Zelle mit Daten

Verfasst: Fr, 23.09.2022 10:00
von rammi22
Hallo,

ich will den Fokus auf die letzte Zelle mit Daten zu setzen mittels eines Python-Makro.

Also "Ctrl + End":
Code Basic

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub


sub Macro1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())


end sub
Code Python

Code: Alles auswählen

########################
## FOCUS ON LAST DATA ##
########################
def setFocusToEndOfUsedArea(controller, sheet, cursor):
    cursor.gotoEndOfUsedArea(False)
    address = cursor.RangeAddress
    cell = sheet.getCellByPosition(address.EndColumn, address.EndRow)

    controller.select(cell)
Hiermit wird die letzte Zelle mit Daten markiert, aber der Fokus verändert sich nicht (scrollt nicht zur markierten Zelle).

Was muss da noch konfiguriert werden?

Re: Python Fokus auf letzte Zelle mit Daten

Verfasst: Fr, 23.09.2022 11:32
von Karolus
Hallo
Vor wenigen Tagen hast du mich (PN) gefragt und ich hab dir den Ratschlag gegeben dich zunächst AUSSCHLIESSLICH mit python zu beschäftigen, ohne irgendwie im Kontext zu LO.
Jetzt machst du genau das Gegenteil: du beschäftigst dich ausschliesslich mit LO-Api-geschichten!!

Zur Frage: Was hindert den Benutzer, dessen Anwesenheit im Kontext ja gegeben ist, die Tastenkombination ctrl end zu benutzen?


Zum Code:
du postest eine Funktion die jetzt isoliert betrachtet von andern nicht direkt getestet werden kann, das ist ungeschickt weil wir uns den aufrufenden Code dazudenken müssen.

Du popelst auf komische Weise nochmal ``cell`` zusammen obwohl ``cursor`` an der Stelle Objekt-gleich ist.

Code: Alles auswählen

########################
## FOCUS ON LAST DATA ##
########################
def setFocusToEndOfUsedArea(controller, sheet, cursor):
    cursor.gotoEndOfUsedArea(False)
    address = cursor.RangeAddress
    col_index, row_index = address.StartColumn, address.StartRow
    controller.setFirstVisibleColumn(max(col_index-3, 0))
    controller.setFirstVisibleRow(max(row_index-5, 0))

    controller.select(cursor)

Re: Python Fokus auf letzte Zelle mit Daten

Verfasst: Fr, 23.09.2022 18:27
von rammi22
Karolus hat geschrieben: Fr, 23.09.2022 11:32

Code: Alles auswählen

########################
## FOCUS ON LAST DATA ##
########################
def setFocusToEndOfUsedArea(controller, sheet, cursor):
    cursor.gotoEndOfUsedArea(False)
    address = cursor.RangeAddress
    col_index, row_index = address.StartColumn, address.StartRow
    controller.setFirstVisibleColumn(max(col_index-3, 0))
    controller.setFirstVisibleRow(max(row_index-5, 0))

    controller.select(cursor)
Danke

Re: Python Fokus auf letzte Zelle mit Daten

Verfasst: Sa, 24.09.2022 09:27
von Karolus
Hallo
Um noch mal zu verdeutlichen was ich hier mit ausschliesslich LO_Api meine:

Tausche im Quelltext oben:
def durch sub nimm den : am Ende der Signatur raus, und schreibe unten drunter:
end sub →→ fertig ist das Basic-aquivalent.
(die einzige native python-funktion im code max gibts halt auch in Basic.)