Inhoud

# Waardes lezen en schrijven naar bereiken

Macro's in LibreOffice Calc moeten vaak waardes lezen en schrijven van/naar werkbladen. Deze helppagina beschrijft de verschillende benaderingen voor toegang tot werkbladen en bereiken om hun waardes te lezen of te schrijven.

Alle voorbeelden op deze pagina kunnen zowel in Basic als in Python worden geïmplementeerd.

## Toegang tot een enkele cel

In het onderstaande voorbeeld wordt de numerieke waarde 123 ingevoerd in cel "A1" van het huidige blad.

        Dim oSheet as Object
        Dim oCell as Object
        oSheet = ThisComponent.CurrentController.getActiveSheet()
        oCell = oSheet.getCellRangeByName("A1")
        oCell.setValue(123)

Hetzelfde kan worden bereikt met Python:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.getCurrentController().getActiveSheet()
        cell = sheet.getCellRangeByName("A1")
        cell.setValue(123)

Merk op dat in de vorige voorbeelden de cel wordt benaderd met de bereiknaam "A1". Het is ook mogelijk om toegang te krijgen tot cellen met behulp van indexen alsof het blad een matrix is waarin kolommen en rijen vanaf nul worden geïndexeerd.

Dit kan worden gedaan met behulp van de methode getCellByPosition(colIndex, rowIndex), die een kolom- en een rij-index inneemt. Het onderstaande voorbeeld in Basis wijzigt de tekstwaarde in cel "C1" (kolom 2, rij 0).

        oSheet = ThisComponent.CurrentController.getActiveSheet()
        oCell = oSheet.getCellByPosition(2, 0)
        oCell.setString("Hello")

Dit voorbeeld kan ook als volgt in Python worden geïmplementeerd:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.getCurrentController().getActiveSheet()
        cell = sheet.getCellByPosition(2, 0)
        cell.setString("Hello")

Het belangrijkste verschil tussen Python- en Basic-scripts ligt in hoe u toegang krijgt tot het werkbladobject met behulp van de contextvariabele XSCRIPTCONTEXT. Daarna zijn alle methodes en eigenschappen identiek in Basic en Python.

## Waardes, tekenreeksen en formules

Calc-cellen kunnen drie soorten waardes hebben: numeriek, tekenreeksen en formules. Elk type heeft zijn eigen set- en get-methodes:

Type | Get Method | Set Method
--- | --- | ---
Numeriek | getValue() | setValue(newValue)
Tekst | getString() | setString(newString)
Formule | getFormula() | setFormula(newFormula)

Datums en valutawaardes worden in Calc als numerieke waardes beschouwd.

Het volgende voorbeeld voert numerieke waardes in de cellen "A1" en "A2" in en voegt een formule in cel "A3" in die de vermenigvuldiging van deze waardes retourneert.

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

## Bereiken in verschillende bladen openen

In de vorige voorbeelden werd alleen het actieve blad gebruikt om bewerkingen uit te voeren. Het is mogelijk om toegang te krijgen tot celbereiken in verschillende bladen op basis van hun indexen of namen.

In het onderstaande voorbeeld wordt een numerieke waarde ingevoerd in cel "A1" van het blad met de naam "Blad2".

        oSheet = ThisComponent.Sheets.getByName("Sheet2")
        oCell = oSheet.getCellRangeByName("A1")
        oCell.setValue(123)

Dit voorbeeld kan ook als volgt in Python worden geïmplementeerd:

        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.Sheets["Sheet2"]
        cell = sheet.getCellRangeByName("A1")
        cell.setValue(123)

Bladen kunnen ook worden geopend met behulp van op nul gebaseerde indexen die aangeven welk blad, rekening houdend met de volgorde waarin ze in het Calc-bestand verschijnen.

Gebruik in Basic, in plaats van de getByName-methode, Sheets(sheetIndex) zoals hierna wordt getoond:

        oSheet = ThisComponent.Sheets(0)

Dit kan in Python op een vergelijkbare manier worden gedaan:

        sheet = doc.Sheets[0]

## De ScriptForge-bibliotheek gebruiken

De Calc-service van de ScriptForge-bibliotheek kan als volgt worden gebruikt om celwaardes op te halen en in te stellen:

        ' Laadt de ScriptForge-bibliotheek
        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        ' Verkrijgt toegang tot het huidige Calc-document
        oDoc = CreateScriptService("Calc")
        ' Stelt de waarde in van de cellen A1 en A2
        oDoc.setValue("A1", "Hello")
        oDoc.setValue("A2", 123)

De methode setValue kan worden gebruikt om zowel numerieke als tekstwaardes in te stellen. Gebruik de methode setFormula om een celformule in te stellen.

Met de Calc-service kunnen celwaardes worden opgehaald en ingesteld met een enkele regel code. Het onderstaande voorbeeld haalt de waarde uit cel "A1" en toont deze in een berichtvenster.

        Dim val as Variant, oDoc as Object
        oDoc = CreateScriptService("Calc")
        val = oDoc.getValue("A1")
        MsgBox val

De ScriptForge-bibliotheek maakt het ook eenvoudiger om bereiken in verschillende bladen te openen, zoals in het onderstaande voorbeeld wordt aangetoond:

        Dim val1, val2
        ' Haalt cel "A1" op uit het blad met de naam "Blad1"
        val1 = oDoc.getValue("Sheet1.A1")
        ' Haalt cel "B3" op uit het blad met de naam "Blad2"
        val2 = oDoc.getValue("Sheet2.B3")
        ' Plaatst het resultaat in cel "A1" van blad "Rapport"
        Dim result : result = val1 * val2
        oDoc.setValue("Report.A1", result)

De bovenstaande voorbeelden kunnen ook als volgt in Python worden geïmplementeerd:

        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)

Verwante onderwerpen

De ScriptForge bibliotheek

SFDocuments.Calc service

Programmeren met Python-scripts

Help ons, alstublieft!