Makroprogrammering med Python (II)

Dette er anden artikel i en lille serie om makroprogrammering med Python. Den første artikel kan du læse her: Makroprogrammering med Python (I).

I den første artikel viste jeg hvordan det er muligt at skrive tekst i et tekstdokument med Python. Denne gang vil jeg vise hvordan jeg indsætter teksten på markørens placering og ikke i starten af dokumentet ( oTCurs = text.createTextCursor() ).

Først en lille forklaring på cursor (markør) i LibreOffice. Vi opererer med to typer af markører, nemlig ‘text cursor’ og ‘view cursor’.

En view cursor er – som navnet antyder – den synlige markør. I et dokumentvindue ser du altid kun en view cursor. View cursoren understøtter kommandoer som har med visning af dokumenter at gøre, f.eks. at skifte til næste side, eller skifte til starten af dokumentet.

En text cursor er et tekstområde som kan flyttes rundt i et tekstobjekt. Med andre ord kan text cursoren angive et område og ikke kun et punkt.

I vores eksempel skal vi bruge begge cursortyper:

  • View cursoren bruger vi til at aflæse hvor i dokumentet cursoren er placeret.
  • Text cursoren bruger vi til placere teksten som vi vil indsætte.

Linjen
oTCurs = text.createTextCursor()

Skal vi erstatte med
oVCurs = model.CurrentController.getViewCursor()
oTCurs = text.createTextCursorByRange(oVCurs.getStart())

Betegnelserne ‘oVCurs’ og ‘oTCurs’ er helt tilfældigt valgt.

Disse to linjer betyder at vi nu har en ‘usynlig’ placering samme sted som den synlige markør.

Nu vi er i gang, kan vi lige kigge på hvad vi også kan bruge oTCurs til. De følgende to linjer sætter tekstfarven (CharColor = 255) og skrifttypen (CharFontName=Arial)

oTCurs.setPropertyValue(“CharColor”, 255)
oTCurs.setPropertyValue(“CharFontName”, “Arial”)

Vores Python program ser nu sådan ud:

# HelloWorld python script for the scripting framework
def WriteSomething( ):
    model = XSCRIPTCONTEXT.getDocument()
    text = model.Text
    oVCurs = model.CurrentController.getViewCursor()
    oTCurs = text.createTextCursorByRange(oVCurs.getStart())   
    oTCurs.setPropertyValue("CharColor", 255)
    oTCurs.setPropertyValue("CharFontName", "Arial")
    StringToWrite = "Hello world"
    text.insertString( oTCurs, StringToWrite , 0 )

 

Om leif

Leif Lodahl Leif er certificeret PRINCE2 projektleder og har mange års erfaring inden for dette felt. Desuden er det Leif, der styrer aktiviteterne omkring LibreOffice (tidligere OpenOffice.org), og det er her Leif er på hjemmebane. På dette felt har Leif erfaring med både rådgivning, konsulentarbejde og undervisning. Leif Lodahl er manden, der står i spidsen for Libreoffice i Danmark, og han er en hyppig deltager i debatten omkring LibreOffice og open source.
Dette indlæg blev udgivet i Kontorblokken og tagget , , , , , . Bogmærk permalinket.

Skriv en kommentar