Makroer hører til et af tre steder:
- I LibreOffice (installeret sammen med programmet)
- På din pc (installeret af dig selv eller vha. en udvidelse)
- I det aktuelle dokument
Her vil jeg starte forsigtigt med at beskrive hvordan du kan indsætte en tekstværdi et bestemt sted i dit regneark:
Trin 1: Opret makroen
Åbn Calc og gem dit dokument.
Vælg Funktioner - Makroer - Administrer makroer - LibreOffice Basic
Her kan du i venstre side af vinduet se de tre hovedgrupper: Mine makroer, LibreOffice makroer, dit dokument. Det er netop her du vælger placeringen af din makro. Vælg dit dokument ved at klikke på pilen til venstre. Klik på knappen Opret. Klik OK i dialogen (accepter modulnavnet Module1).
Trin 2: Programmering
Du står nu i den indbyggede makroeditor, hvor du i det store vindue i højre side kan se din makrokode. Lige nu er det forholdsvis tomt. Ret Linjen Sub Main til Sub Hej_Verden. Det betyder bare at subrutinen Main nu hedder Hej_Verden:
REM ***** BASIC *****
Sub Hej_Verden
End Sub
Det vi skal kigge på nu er koden som skal tilføjes mellem Sub Hej_Verden og End Sub.
Først skal vi deklarere to vigtige variable:
dim document as object
dim dispatcher as object
Vi går straks videre og putter noget indhold i de to variable:
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
ThisComponent refererer til det aktuelle dokument. Alt hvad du gør i LibreOffice, f.eks type, farve, indsætte, overvåges af en 'controller'. Controlleren sender derefter ændringerne til dokumentvinduet, altså hovedområdet i Calc. Variablen document dækker med andre ord over dokumentet i Calc.
createUnoService opretter en instans af DispatchHelper. Denne service vil hjælpe os med at afsende de opgaver fra makroen til vinduet. Næsten alle LibreOffice makro-opgaver kan udføres ved hjælp af en dispatcher.
Vores formål er at indsætte "Hej verden" i den første celle. Derfor skal vi bruge to egenskaber, nemlig "ToPoint" og "StringName":
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
ToPoint er cellen du ønsker at gøre noget med.
args2(0).Name = "StringName"
args2(0).Value = "Hej verden!"
StringName er den tekst du skal indsætte senere.
Disse to parametre skal vi nu bruge en ad gangen, og få LibreOffice til at udføre to handlinger i rækkefølge:
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
I dette tilfælde indsætter vi en tekststreng "Hej verden" i cellen. Hvis vi ville, kunne vi indsætte en talværdi, f.eks. "12345", som vil blive indsat i cellen. Men hvis cellen er formateret som tal, vil værdien blive omdannet til tallet 12345.
Trin 3: Afprøv
Øverst i din makroeditor kan du eksekvere (udføre) makroen.
Den komplette makro ser sådan ud:
REM ***** BASIC *****
sub Hej_Verden
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
dim args2(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
args2(0).Name = "StringName"
args2(0).Value = "Hej verden!"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
end sub