LibreOffice 24.8 Hjelp
Å lytte til dokumenthendelser kan hjelpe i følgende situasjoner:
Identifiser et nytt dokument ved åpningstidspunktet, i motsetning til eksisterende, og gjøre et eget oppsett.
Kontroller behandlingen av forespørsler om lagring av dokumenter, kopiering av dokumenter, utskrift eller sammenslåing.
Oppdater innholdsfortegnelse, indekser eller tabelloppføringer i et Writer -dokument på nytt når dokumentet skal lukkes
Importer matte Python -pakker før du åpner et Calc -dokument. Frigjør disse pakkene når dokumentet lukkes.
Ved siden av tilordne makroer til hendelser , kan man overvåke LibreOffice-dokumenthendelser. Applikasjonsprogrammeringsgrensesnitt (API) kringkastere er ansvarlige for å kalle opp hendelsesskript. I motsetning til lyttere som må ha definert alle støttede metoder, selv om de ikke brukes, krever dokumentovervåkere bare to metoder ved siden av lenkede hendelseskript.
Overvåking vises her for Basic- og Python-språkene ved bruk av objektorientert programmering. Å tilordne OnLoad-skript til -hendelsen, er tilstrekkelig for å starte og avslutte dokumenthendelsesovervåking. -menyen brukes til å tilordne begge skriptene.
Avlytting av hendelser hjelper til med å sette skript pre og post betingelser, for eksempel lasting og lossing av biblioteker eller spor av skriptbehandling i bakgrunnen. Access2Base.Trace modulbruk viser den andre konteksten.
Overvåkning av hendelser starter fra objektinstansering og stopper til slutt når Python slipper objektet. Hevede hendelser rapporteres ved å bruke Access2Base konsollen.
OnLoad og OnUnload hendelser kan brukes til å henholdsvis sette og deaktivere Python-programbanen. De beskrives som og .
# -*- 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):
""Overvåk dokumenthendelser""
'''
tilpasset fra 'Python script for å overvåke OnSave event' ved
https://forum.openoffice.org/en/forum/viewtopic.php?t=68887
'''
def __init__(self):
"" "Overvåkning av dokumenthendelser" ""
'' 'rapport ved bruk av Access2Base.Sporings-konsoll ELLER
rapport i 1. ark, første kolonne for Calc-dokumenter '''
ctx = uno.getComponentContext()
smgr = ctx.getServiceManager()
desktop = smgr.createInstanceWithContext(
'com.sun.star.frame.Desktop' , ctx)
self.doc = desktop.CurrentComponent
#self.row = 0 # avkommenter for Calc-dokumenter
Console.setLevel("DEBUG")
self.listen () # Begynn å overvåke dok. hendelser
@property
def Filename(self) -> str:
sys_filename = uno.fileUrlToSystemPath(self.doc.URL)
return os.path.basename(sys_filename)
def setCell(self, calcDoc, txt: str):
"""Output doc. Hendelser i første kolonne i et Calc regneark" ""
sheet = calcDoc.getSheets().getByIndex(0)
sheet.getCellByPosition(0,self.row).setString(txt)
self.row = self.row + 1
def listen (self, * args): # OnLoad / OnNew tidligst
"""Start dokument. Overvåkning av hendelser"""
self.doc.addDocumentEventListener(self)
Console.log ("INFO", "Dokumenthendelser logges", Aktiv)
def sov(selv, * args): # OnUnload senest (valgfritt)
""" Stopp dok.-hendelsesovervåking """
self.doc.removeDocumentEventListener(self)
Konsoll.log ("INFO", "Dokumenthendelser er logget", Sant)
def documentEventOccured(self, event: DocumentEvent):
""" Oppfanger alle dok- hendelser """
#self.setCell(event.Source, event.EventName) # kun for Calc-dokument
Console.log("DEBUG",
event.EventName+" in "+self.Filename,
False)
def disposing(self, event: EventObject):
""" Frislipp alle aktiviteter """
self.sleep()
Console.show()
def OnLoad(*args): # 'Open Document'-hendelse
lytter = UiDocument() # Starter lytting
def OnUnload(*args): # «Dokument har blitt lukket»-hendelse
send # (valgfritt) utført når det avsluttes
g_exportedScripts = (OnLoad,)
from com.sun.star.script.provider import XScript
class Console():
"""
(Bak/For) grunnkonsoll for å rapportere / logge programkjøring.
"""
@staticmethod
def trace(*args,**kwargs):
"""Skriv ut frie gjenstandsliste til konsollen"""
scr = Console._a2bScript(script='DebugPrint', module='Compatible')
scr.invoke((args),(),())
@staticmethod
def log(level: str, text: str, msgBox=False):
"""Legg loggmelding til konsollen, valgfri brukerspørring """
scr = Console._a2bScript(script='TraceLog')
scr.invoke((level,text,msgBox),(),())
@staticmethod
def setLevel(logLevel: str):
"""Sett nedre grense for loggmeldinger """
scr = Console._a2bScript(script='TraceLevel')
scr.invoke((logLevel,),(),())
@staticmethod
def show():
""" Vis konsollinnhold/dialog """
scr = Console._a2bScript(script='TraceConsole')
scr.invoke((),(),())
@staticmethod
def _a2bScript(script: str, library='Access2Base',
module='Trace') -> XScript:
''' Ta tak i applikasjonsbasert Basic skript '''
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
Husk den feilstavede metoden documentEventOccured som arver en skrivefeil fra LibreOffice Application Programming Interface (API).
Hendelser som Importere Python-moduler for mer informasjon.
og kan brukes til å aktivere og deaktivere Python-bane for brukerskript eller LibreOffice-skript. På lignende måte kan dokumentbaserte Python-biblioteker eller -moduler lastes og frigis ved å bruke og -hendelser. SeVed å bruke Konsoll-Logger initialisering. _documentEventOccured rutine - angitt av ConsoleLogger - fungerer som et unikt inngangspunkt for å fange alle dokumenthendelser.
-menyen -fanen, utløser hendelsen en
Option Explicit
Global _obj As Object ' controller.ConsoleLogger instans
Sub OnLoad(evt As com.sun.star.document.DocumentEvent) ' >> pne Dokument <<
_obj = New ConsoleLogger : _obj.StartAdapter(evt)
End Sub ' controller.OnLoad
Sub _documentEventOccured(evt As com.sun.star.document.DocumentEvent)
'' 'ConsoleLogger unikt inngangspunkt' ''
_obj.DocumentEventOccurs(evt)
End Sub ' controller._documentEventOccured
Hendelsesovervåking starter fra det øyeblikket et ConsoleLogger -objekt blir instantiert og stopper til slutt, når dokumentet lukkes. StartAdapter rutine laster nødvendige grunnleggende biblioteker, mens oppfangede hendelser rapporteres ved hjelp av Access2Base.Trace -modulen.
Option Explicit
Option Compatible
Option ClassModule
' ADAPTER design mønster objekt som skal instantieres i "Open Document" hendelse
Private Const UI_PROMPT = True
Privat Const UI_NOPROMPT = False 'Sett den til True for å visualisere dokumenthendelser
' MEDLEMMER
Private _evtAdapter As Object ' com.sun.star.document.XDocumentEventBroadcaster
Privat tekstmelding for _txtMsg As String for å logge i konsollen
' EGENSKAPER
Private Property Get FileName As String
''' Systemavhengig filnavn '''
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
' METODER
Public Sub DocumentEventOccurs(evt As com.sun.star.document.DocumentEvent)
''' Overvåking av dokumenthendelser '''
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)
''' Igangsetting av dokumenthendelseslogging '''
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 og "Dokumenthendelser logges", 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)
''' Avslutt loggføring av dokumenthendelser '''
ThisComponent.removeDocumentEventListener( _evtAdapter )
If IsMissing(evt) Then _txtMsg = "" Else _txtMsg = evt.EventName & "-"
Access2Base.Trace.TraceLog ("INFO", _txtMsg og "Dokumenthendelser er logget", UI_PROMPT)
Access2Base.Trace.TraceConsole () 'Dialogbok for oppfangede hendelser
End Sub ' controller.ConsoleLogger._StopAdapter
' HENDELSER
' Koden din for håndterte hendelser lagres her
Vær oppmerksom på den feilstavede metoden _documentEventOccured som arver en skrivefeil fra LibreOffice Application Programming Interface (API).
Kringkaster-API-objektet inneholder listen over hendelser den er ansvarlig for:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, apso_utils as ui
def displayAvailableEvents():
"" "Vis dokumenthendelser" ""
'''
tilpasset fra DisplayAvailableEvents () av A. Pitonyak
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,)
Alternativ Python Script Organizer (APSO) utvidelse brukes til å gjengi hendelsesinformasjon på skjermen.
Sub DisplayAvailableEvents
'''Vis dokumenthendelser'''
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