Waarden lezen en schrijven naar bereiken

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

note

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

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 methoden en eigenschappen identiek in Basic en Python.


Waarden, tekenreeksen en formules

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

Type

Get Method

Set Method

Numeriek

getValue()

setValue(newValue)

Tekst

getString()

setString(newString)

Formule

getFormula()

setFormula(newFormula)


note

Datums en valutawaarden worden in Calc als numerieke waarden beschouwd.


Het volgende voorbeeld voert numerieke waarden in de cellen "A1" en "A2" in en voegt een formule in cel "A3" in die de vermenigvuldiging van deze waarden 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 indices 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 celwaarden 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)
note

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


Met de Calc-service kunnen celwaarden 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)

Help ons, alstublieft!