Seite 1 von 1
Calc: Kann man die oberste aktuell angezeigte Zeile/Zelle bestimmen?
Verfasst: So 11. Aug 2019, 22:54
von Reth
Hallo zusammen,
gibt es eine Möglichkeit, dies per Makro zu tun, also dass man den Wert der aktuell ganz oben angezeigten Zeile/Zelle erhält - auch wenn gescrollt wurde?
Dank euch schon mal!
Ciao
Re: Calc: Kann man die oberste aktuell angezeigte Zeile/Zelle bestimmen?
Verfasst: Fr 8. Apr 2022, 17:17
von Ralf_NI
Hallo Reth,
Die Methode zum Lesen der ersten sichtbaren Zeilennummer lautet
getFirstVisibleRow()
Code: Alles auswählen
ErsteSichtbareZeile= ThisComponent.CurrentController.getFirstVisibleRow()
und zum übergeben der ersten Zeilenummer an das Fenster
setFirstVisibleRow(long)
Code: Alles auswählen
ThisComponent.CurrentController.setFirstVisibleRow(ErsteSichtbareZeile)
Ich hatte genau das selbe Problem und hab die Lösung lange nicht finden können.
Ein wichtiger Tipp zur Lösung war das Buch OOME_deutsch.odt
https://www.uni-due.de/~abi070/ooo.html.
Das Objekt auf die die Methode angewendet werden muss, konnte ich dort jedoch nicht finden (selbstredend für erfahrene Programmierer warscheinlich

). Das Objekt konnte ich nur durch Beispiele suchen, und probieren finden. Ich bin da noch sehr unerfahren. Über die Referenz bin ich da nicht drauf gekommen.
Für Fehler/Unübliche Darstellung sorry, das ist mein erster Beitrag

.
Gruß
Ralf
Re: Calc: Kann man die oberste aktuell angezeigte Zeile/Zelle bestimmen?
Verfasst: Sa 9. Apr 2022, 17:42
von F3K Total
Hallo,
wo möchtest du denn den Wert angezeigt bekommen?
Gruß R
Kann man die oberste aktuell angezeigte Zeile/Zelle bestimmen? PropertyChangeListener
Verfasst: So 10. Apr 2022, 08:45
von F3K Total
Hallo zusammen,
ich habe leider gerade erst gesehen, das der ursprüngliche Beitrag bereits in 2019 geschrieben wurde.
Egal, ich habe mir Gedanken gemacht und auch eine recht interessante Lösung gefunden.
Mit einem
PropertyChangeListener und einer
Benutzerdefinierten Funktion.
Der Listener merkt, wenn man scrollt, mit
FirstVisibleRow wird die oberste Zeile ermittelt, dann der Inhalt der gewünschten Spalte ausgelesen und in der ersten Zeile des Tabellenblattes, die ich fixiert habe, angezeigt und ggf. weiterverarbeitet.
Wenn man den Cursor nun in den unteren Bereich setzt und auf dem Blatt scrollt, passt sich die oberste Zeile entsprechend an.
Hier der Code:
Code: Alles auswählen
global oListener
function Get_Top_Value(sColumn) as double
on error goto errorhandler
oContoller = ThisComponent.CurrentController
nRow = oContoller.FirstVisibleRow
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")'Name der Tabelle
oColumn = oSheet.Columns.Getbyname(sColumn)'Name der Spalte
oCell = oColumn.getcellbyPosition(0,nRow)
Get_Top_Value = oCell.Value
errorhandler:
End function
Sub CreateListener
oListener = CreateUnoListener( "PropertyChangeListener_", "com.sun.star.beans.XPropertyChangeListener" )
ThisComponent.CurrentController.addPropertyChangeListener("",oListener)
End Sub
Sub RemoveListener()
ThisComponent.CurrentController.removePropertyChangeListener("",oListener)
End Sub
Sub PropertyChangeListener_propertyChange(oEvent)
ThisComponent.calculateAll
End Sub
Sub PropertyChangeListener_disposing
End Sub
Beispiel anbei.
Gruß R
Re: Calc: Kann man die oberste aktuell angezeigte Zeile/Zelle bestimmen?
Verfasst: Mo 11. Apr 2022, 01:31
von Ralf_NI
Hallo R,
das erscheint mir eine exactere Lösung, zu dem was Reth da angefragt hatte, zu sein.
Ich hatte nicht daran gedacht darauf hin zu weisen, das das schon ein älterer Beitrag war.
Ich hab Deinen Code nicht zum Laufen bekommen. Der hat für mich zu viel Tiefgang.
Ich wäre froh, wenn ich hinreichend systematisch darauf kommen würde, warum ich das Objekt CurrentController und nicht zum Beispiel CurrentDocument oder welches auch immer ansprechen muss. Vielleicht steht die Vorgehensweise ja im Pitoniak irgendwo. Ich habs noch nicht durch gelesen.
Für mich war der Beitrag trotzdem sehr Aufschlussreich (Events etc.). Vielen Dank von meiner Seite!
Gruß Ralf