Python Fokus auf letzte Zelle mit Daten

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

rammi22
****
Beiträge: 126
Registriert: Mo, 26.03.2012 02:59

Python Fokus auf letzte Zelle mit Daten

Beitrag 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?
Gruss Rammi
----------------------------------------------------
Linux 22.04 | Win11 | LibreOffice 7.3.5.2
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Python Fokus auf letzte Zelle mit Daten

Beitrag 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)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
rammi22
****
Beiträge: 126
Registriert: Mo, 26.03.2012 02:59

Re: Python Fokus auf letzte Zelle mit Daten

Beitrag 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
Gruss Rammi
----------------------------------------------------
Linux 22.04 | Win11 | LibreOffice 7.3.5.2
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Python Fokus auf letzte Zelle mit Daten

Beitrag 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.)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Antworten