Pomoc za LibreOffice 25.2
Dohladowanje dokumentowych podawkow móže w slědowacych situacijach pomhać:
Nowy dokument za wočinjenje identifikować, na rozdźěl wot eksistowacych, a přewjedźe wotpowědnu konfiguraciju.
Předźěłowanje naprašowanjow składowanja, kopěrowanja, ćišćenja abo serijoweho ćišća wodźić.
Zapis wobsaha, hesłarja abo tabelowe zapiski dokumenta Writer aktualizować, hdyž so ma dokumenta začinić
Pakety math Python importować, prjedy hač so dokument Calc wočinja. Tute pakety přewostajić, hdyž so dokument začinja.
Nimo připokazowanja makrow k podawkam móžeće podawki dohladować, kotrež so přez dokumenty LibreOffice pušćeja. Sćelaki Nałoženskeje programowanskej tykački (API) su za wuwołanje podawkowych skriptow zamołwite. Na rozdźěl wot posłuchakow, kotrež dyrbja wšě podpěrane metody definować, samo hdyž so njewužiwaja, dokumentowe dohladowanja jenož dwě metodźe nimo podawkowych skriptow trjebaja.
Dohladowanje so deleka za rěči Basic a Python z pomocu na objekt orientowaneho programowanja zwobraznjuje. Připokazowanje skripta OnLoad podawkej dosaha, zo by dohladowanje dokumentoweho podawka iniciěrowało a skónčiło. Wubjerće meni rajtark: , zo byšće wobaj skriptaj připokazał.
Wotpopadnjenje podawkow pomha, wuměnjenja skriptow nastajić, na přikład zo bychu so biblioteki zapřijimali a wuswobodźili abo so předźěłowanje skriptow w pozadku slěduje. Wužiwanje modula Access2Base.Trace druhi kontekst zwobraznjuje.
Dohladowanje podawkow so wot objektowego instanciěrowanja započina a kónči so, hdyž Python objekt pušća. Wuwabjene podawki so z pomocu konsole Access2Base zdźěleja.
Podawkaj OnLoad a OnUnload datej so wužiwać, zo byštej šćežku programow Python nastajiłoj resp. zběhnyłoj. Wopisujetej so jako a .
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os.path, uno, unohelper
from com.sun.star.document import DocumentEvent, \
XDocumentEventListener as AdapterPattern
from com.sun.star.lang import EventObject
class UiDocument(unohelper.Base, AdapterPattern):
""" Dokumentowe podawki dohladować """
'''
po 'skripće Python za dohladowanje podawka OnSave' při
https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
'''
def __init__(self):
""" Monitor dokumentowych podawkow """
''' rozprawa z konsolu Access2Base.Trace ABO
rozprawa w 1. špalće 1. tabele dokumentow Calc '''
ctx = uno.getComponentContext()
smgr = ctx.getServiceManager()
desktop = smgr.createInstanceWithContext(
'com.sun.star.frame.Desktop' , ctx)
self.doc = desktop.CurrentComponent
#self.row = 0 # wotstronja komentary jenož za dokumenty Calc
Console.setLevel("DEBUG")
self.listen() # Dohladowanje dokumentowych podawkow startować
@property
def Filename(self) -> str:
sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
return os.path.basename(sys_filename)
def setCell(self, calcDoc, txt: str):
""" Wudaćowe dokumentowe podawki w prěnjej špalće tabele Calc """
sheet = calcDoc.getSheets().getByIndex(0)
sheet.getCellByPosition(0,self.row).setString(txt)
self.row = self.row + 1
def listen(self, *args): # OnLoad/OnNew najzašo
""" Dohladowanje dokumentowych podawkow startować """
self.doc.addDocumentEventListener(self)
Console.log("INFO", "Dokumentowe podawki so protokoluja", True)
def sleep(self, *args): # OnUnload najpozdźe (opcionalne)
""" Dohladowanje dokumentowych podawkow zastajić """
self.doc.removeDocumentEventListener(self)
Console.log("INFO", "Dokumentowe podawki su so protokolowali", True)
def documentEventOccured(self, event: DocumentEvent):
""" Wotpopadnje wšě dokumentowe podawki """
#self.setCell(event.Source, event.EventName) # jenož za dokumenty Calc
Console.log("DEBUG",
event.EventName+" in "+self.Filename,
False)
def disposing(self, event: EventObject):
""" Wšě aktiwity dopušćić """
self.sleep()
Console.show()
def OnLoad(*args): # Podawk 'Dokument wočinić'
listener = UiDocument() # Iniciěruje dohladowanje
def OnUnload(*args): # Podawk 'Dokument je so začinił'
pass # (opcionalny) přewjedźeny, hdyž postajeny
g_exportedScripts = (OnLoad,)
from com.sun.star.script.provider import XScript
class Console():
"""
(Prědkowa/Pozadkowa) konsola za zdźělenje/protokolowanje programoweho wuwjedźenja.
"""
@staticmethod
def trace(*args,**kwargs):
""" Swobodnu lisćinu zapiskow do konsole wudać """
scr = Console._a2bScript(script='DebugPrint', module='Compatible')
scr.invoke((args),(),())
@staticmethod
def log(level: str, text: str, msgBox=False):
""" Ke konsoli protokolowu zdźělenku připowěsnyć, opcionalna wužiwarska namołwa"""
scr = Console._a2bScript(script='TraceLog')
scr.invoke((level,text,msgBox),(),())
@staticmethod
def setLevel(logLevel: str):
""" Delnju mjezu za protokolowu zdźělenku postajić """
scr = Console._a2bScript(script='TraceLevel')
scr.invoke((logLevel,),(),())
@staticmethod
def show():
""" Konsolowy wobsah/dialog pokazać """
scr = Console._a2bScript(script='TraceConsole')
scr.invoke((),(),())
@staticmethod
def _a2bScript(script: str, library='Access2Base',
module='Trace') -> XScript:
''' Na nałoženju bazowany skript Basic wotwołać '''
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext(
"com.sun.star.script.provider.MasterScriptProviderFactory",
uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
scriptName = "vnd.sun.star.script:"+library+"."+module+"."+script+"?language=Basic&location=application"
xScript = scriptPro.getScript(scriptName)
return xScript
Dźiwajće na wopak napisanu metodu documentEventOccured, kotraž pisanski zmylk wot nałoženskeje programowanskeje tykački (API) namrěwa.
Podawkaj Module Python importować za dalše informacije.
a móžetej šćežku Python za wužiwarske skripty abo skripty LibreOffice nastajić a zběhnyć. Na podobne wašnje dadźa so biblioteki abo module Python z podawkomaj a zapřijeć a pušćić. ČitajćeZ pomocu menija Console Logger startuje. Rutina _documentEventOccured – postajena přez Console Logger – jako jónkróčny zastupny dypk słuži, zo by wšě dokumentowe podawki wotpopadnyła.
rajtark: podawk inicializaciju
Option Explicit
Global _obj As Object ' Instanca controller.ConsoleLogger
Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> Dokument wočinić <<
_obj = New ConsoleLogger : _obj.StartAdapter(evt)
End Sub ' controller.OnLoad
Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
''' Jónkróćny zastupny dypk za ConsoleLogger '''
_obj.DocumentEventOccurs(evt)
End Sub ' controller._documentEventOccured
Dohladowanje podawkow so wot wokomika započina, w kotrymž so objekt ConsoleLogger instancuje a naposledk so ze začinjenjom dokumenta kónči. Rutina StartAdapter trěbne biblioteki Basic zapřijima, mjeztym zo so wotpopadnjene podawki z pomocu modula Access2Base.Trace zdźěleja.
Option Explicit
Option Compatible
Option ClassModule
' Naćiskowy mustrowy objekt ADAPTER, kotryž so ma w podawku „Dokument wočinić“ instancować
Private Const UI_PROMPT = True
Private Const UI_NOPROMPT = False ' Na True nastajić, zo bychu so dokumentowe podawki wizualizowali
' ČŁONOJO
Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
Private _txtMsg As String ' tekstowa zdźělenka za protokolowanje w konsoli
' KAJKOSĆE
Private Property Get FileName As String
''' Wot systema wotwisne datajowe mjeno '''
Const _LIBRARY = "Tools" : With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
End With
Filename = Tools.Strings.FilenameOutofPath(ThisComponent.URL)
End Property ' controller.ConsoleLogger.Filename
' METODY
Public Sub DocumentEventOccurs(evt As com.sun.star.document.DocumentEvent)
''' Dokumentowe podawki dohladować '''
Access2Base.Trace.TraceLog("DEBUG", _
evt.EventName &" in "& Filename(evt.Source.URL), _
UI_NOPROMPT)
Select Case evt.EventName
Case "OnUnload" : _StopAdapter(evt)
End Select
End Sub ' controller.ConsoleLogger.DocumentEventOccurs
Public Sub StartAdapter(Optional evt As com.sun.star.document.DocumentEvent)
''' Protokolowanje dokumentowych podawkow inicializować '''
Const _LIBRARY = "Access2Base" : With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded(_LIBRARY) Then .LoadLibrary(_LIBRARY)
End With : Access2Base.Trace.TraceLevel("DEBUG")
If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
Access2Base.Trace.TraceLog("INFO", _txtMsg & "Dokumentowe podawki so protokoluja", UI_PROMPT)
_evtAdapter = CreateUnoListener( "_", "com.sun.star.document.XDocumentEventListener" )
ThisComponent.addDocumentEventListener( _evtAdapter )
End Sub ' controller.ConsoleLogger.StartAdapter
Private Sub _StopAdapter(Optional evt As com.sun.star.document.DocumentEvent)
''' Protokolowanje dokumentowych podawkow skónčić '''
ThisComponent.removeDocumentEventListener( _evtAdapter )
If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
Access2Base.Trace.TraceLog("INFO", _txtMsg & "Dokumentowe podawki su so protokolowali", UI_PROMPT)
Access2Base.Trace.TraceConsole() ' Dialog wotpopadnjenych podawkow
End Sub ' controller.ConsoleLogger._StopAdapter
' PODAWKI
' Waš kod za předźěłane podawki je tu
Dźiwajće na wopak napisanu metodu _documentEventOccured, kotraž pisanski zmylk wot nałoženskeje programowanskeje tykački (API) namrěwa.
Objekt Broadcaster API lisćinu podawkow k dispoziciji staja, za kotruž je zamołwity:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, apso_utils as ui
def displayAvailableEvents():
""" Dokumentowe podawki pokazać """
'''
adaptowany wot DisplayAvailableEvents() wot A. Pitonyaka
https://forum.openoffice.org/en/forum/viewtopic.php?&t=43689
'''
ctx = XSCRIPTCONTEXT.getComponentContext()
smgr = ctx.ServiceManager
geb = smgr.createInstanceWithContext(
"com.sun.star.frame.GlobalEventBroadcaster", ctx)
events = geb.Events.getElementNames()
ui.msgbox('; '.join(events))
g_exportedScripts = (displayAvailableEvents,)
Rozšěrjenje Alternative Python Script Organizer (APSO) so wužiwa, zo by podawkowe informacije na wobrazowce renderowało.
Sub DisplayAvailableEvents
""" Dokumentowe podawki pokazać """
Dim geb As Object ' com.sun.star.frame.GlobalEventBroadcaster
Dim events() As String
geb = CreateUnoService("com.sun.star.frame.GlobalEventBroadcaster")
events = geb.Events.ElementNames()
MsgBox Join(events, "; ")
End Sub