LibreOffice 25.2 Hjelp
Makroar i LibreOffice Calc treng ofte å lesa og skriva verdiar frå og til ark. Denne hjelpsida forklarar dei ulike måtane til å få tilgang til ark og område for å lesa eller skriva verdiane deira.
Alle eksempla som vert brukte på denne sida kan brukast både i Basic og i Python.
Eksempelet nedanfor legg talverdien 123 i celle «A1» i det gjeldande arket.
    Dim oSheet as Object
    Dim oCell as Object
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  Du kan gjera det same med Python:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Merk at i dei tidlegare eksempla vert cella opna ved å bruka områdenamnet «A1». Det er også råd å få tilgang til celler ved å bruka indeksar som om arket var ei matrise der kolonnar og rader vert indekserte frå null.
Dette kan gjerast med metoden getCellByPosition(kolIndeks, radIndeks) som brukar ein kolonne- og ein radindeks. Eksempelet nedanfor i Basic endrar tekstverdien i celle «C1» (kolonne 2, rad 0).
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellByPosition(2, 0)
    oCell.setString("Hello")
  Dette eksempelet kan også brukast i Python slik:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellByPosition(2, 0)
    cell.setString("Hello")
  Hovudskilnaden mellom Python- og Basic-skript er korleis du får tilgang til arkobjektet ved å bruka samanhengsvariabelen XSCRIPTCONTEXT. Etter det er alle metodar og eigenskapar like i Basic og Python.
Calc-celler kan ha tre verditypar: talverdiar, strengar og formlar. Kvar type har sine eigne metodar for å setja og henta data:
| Type | Get Method | Set Method | 
|---|---|---|
| Numerisk | getValue() | setValue(newValue) | 
| Tekst | getString() | setString(newString) | 
| Formel | getFormula() | setFormula(newFormula) | 
Dato- og valutaverdiar vert sett på som talverdiar i Calc.
Det neste eksempelet set inn talverdiar i cellene «A1» og «A2» og set ein formel inn i «A3» som returnerer multiplikasjonen av desse to verdiane.
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(10)
    oCell = oSheet.getCellRangeByName("A2")
    oCell.setValue(20)
    oCell = oSheet.getCellRangeByName("A3")
    oCell.setFormula("=A1*A2")
  Dei førre eksempla utførte operasjonar berre på det gjeldande arket. Det er mogleg å få tilgang til celleområde i andre ark etter indeksar eller namn.
Eksempelet nedanfor legg ein talverdi i celle «A1» i arket «Ark2».
    oSheet = ThisComponent.Sheets.getByName("Sheet2")
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  Dette eksempelet kan også brukast i Python slik:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Sheet2"]
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Ark kan også nåast ved å bruka nullbaserte indeksar som indikerer kva ark det gjeld ut frå rekkjefølgja dei vert viste i Calc-fila.
I staden for å bruka metoden getByName brukar du i Basic Sheets(sheetIndex) som vist her:
    oSheet = ThisComponent.Sheets(0)
  Dette kan gjerast på ein liknande måte i Python:
    sheet = doc.Sheets[0]
  Calc-tenesta til ScriptForge-biblioteket kan brukast til å henta og setja celleverdiar slik:
    ' Lastar inn ScriptForge-biblioteket
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    ' Får tilgang til det gjeldande Calc-dokumentet
    oDoc = CreateScriptService("Calc")
    ' Set verdien for cellene A1 og A2
    oDoc.setValue("A1", "Hello")
    oDoc.setValue("A2", 123)
  Metoden setValue kan brukast til å setja både numeriske- og tekstverdiar. For å setja ein celleformel, bruk metoden setFormula.
Med Calc-tenesta kan henting og setjing av celleverdiar gjerast med ei enkelt kodelinje. Eksempelet nedanfor hentar verdien frå celle «A1» og viser han i ein meldingsboks.
    Dim val as Variant, oDoc as Object
    oDoc = CreateScriptService("Calc")
    val = oDoc.getValue("A1")
    MsgBox val
  ScriptForge-biblioteket gjer det også enklare å få tilgang til område i ulike ark, som vist i eksempelet nedanfor:
    Dim val1, val2
    ' Hentar cella «A1» frå arket «Ark1»
    val1 = oDoc.getValue("Sheet1.A1")
    ' Hentar cella «B3» frå arket «Ark2»
    val2 = oDoc.getValue("Sheet2.B3")
    ' Set resultatet i cella «A1» i arket «Rapport»
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  Eksempla ovanfor kan brukast slik i Python:
    from scriptforge import CreateScriptService
    doc = CreateScriptService("Calc")
    doc.setValue("A1", "Hello")
  
    doc = CreateScriptService("Calc")
    bas = CreateScriptService("Basic")
    val = doc.getValue("A1")
    bas.MsgBox(val)
  
    first_val = doc.getValue("Sheet1.A1")
    second_val = doc.getValue("Sheet2.B3")
    result = first_val * second_val
    doc.setValue("Report.A1", result)