Innhald
Innhaldsliste 🔎︎

# Lesa og skriva verdiar til område

Makroar i LibreOffice Calc treng ofte å lesa og skriva verdiar frå/til ark. Denne hjelpsida forklarer 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.

## Tilgang til ei enkelt celle

Eksemplet 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. Eksemplet 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.

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

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.

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

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. Eksemplet 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 eksemplet 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)

Liknande emne

ScriptForge-biblioteket

SFDocuments.Calc

Programmering med Python-skript