Seite 1 von 1

calc python macro freeze

Verfasst: Sa 24. Okt 2020, 12:28
von chris_muc
Wie kann ich die erste Reihe einfrieren?

Ich habe versucht mit:

Code: Alles auswählen

XSCRIPTCONTEXT.getDocument().getCurrentController().getActiveSheet().freeze_panes(1,1)
AttributeError: freeze_panes
Es hat aber nicht geklappt.

Re: calc python macro freeze

Verfasst: So 25. Okt 2020, 11:47
von Mondblatt24
Hallo,
chris_muc hat geschrieben:
Sa 24. Okt 2020, 12:28
Wie kann ich die erste Reihe einfrieren?
Über Menü Ansicht → Zellen fixieren → Erste Spalte/Erste Zeile.

Gruß
Peter

Re: calc python macro freeze

Verfasst: So 25. Okt 2020, 13:32
von chris_muc
Mondblatt24 hat geschrieben:
So 25. Okt 2020, 11:47
Über Menü Ansicht → Zellen fixieren → Erste Spalte/Erste Zeile.
Und wie kann ich das von einem Python Macro ausfuehren?

Re: calc python macro freeze

Verfasst: Mo 26. Okt 2020, 10:17
von mikele

Re: calc python macro freeze

Verfasst: Mo 26. Okt 2020, 15:05
von chris_muc
Also freezing von CurrentDocument ist tatsaechlich einfach und fast wie im Doc von mikele:

Code: Alles auswählen

XSCRIPTCONTEXT.getDocument().getCurrentController().freezeAtPosition(0,1)
Wenn man aber ein anderes Sheet frieren moechte, muss man Dispatcher nutzen:

Code: Alles auswählen

# coding: utf-8
from __future__ import unicode_literals


import uno
from com.sun.star.beans import PropertyValue

def create_instance(name, with_context=False):
    if with_context:
        instance = SM.createInstanceWithContext(name, CTX)
    else:
        instance = SM.createInstance(name)
    return instance

def call_dispatch(doc, url, args=()):
    frame = doc.getCurrentController().getFrame()
    dispatch = create_instance('com.sun.star.frame.DispatchHelper')
    dispatch.executeDispatch(frame, url, '', 0, args)
    return


def jumpFreeze(*args):

    args = ['']
    args[0] = PropertyValue()                 # Default constructor
    args[0].Name = "Nr"
    args[0].Value = 2

    call_dispatch(doc, '.uno:JumpToTable',args)
    call_dispatch(doc, '.uno:FreezePanesFirstRow')


CTX = uno.getComponentContext()
SM = CTX.getServiceManager()
doc = XSCRIPTCONTEXT.getDocument()

jumpFreeze()

Re: calc python macro freeze

Verfasst: Mo 26. Okt 2020, 17:46
von mikele
Hallo,
Wenn man aber ein anderes Sheet frieren moechte, muss man Dispatcher nutzen
Muss man nicht zwingend:

Code: Alles auswählen

	oDoc=XSCRIPTCONTEXT.getDocument()
	oCtrl=oDoc.CurrentController
	oTab=oDoc.Sheets.getByName("Tabelle2")
	oCtrl.setActiveSheet(oTab)
	oCtrl.freezeAtPosition(0,1)
sollte auch funktionieren.
Aber so habe ich gelernt, wie ich den Dispatcher per Python aufrufe ...

Re: calc python macro freeze

Verfasst: Mo 26. Okt 2020, 23:37
von chris_muc
Vielen Dank.
Wieder etwas gelernt :)