Lesa og skriva verdiar til område

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.

note

Alle eksempla som vert brukte på denne sida kan brukast både i Basic og i Python.


Tilgang til ei enkelt celle

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")
  
note

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.


Verdiar, strengar og formlar

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)


note

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")
  

Tilgang til område i ulike ark

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]
  

Bruka ScriptForge-biblioteket

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)

note

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)
  

Støtt oss!