Læsning og Skrivning af værdier til områder

Makroer i Collabora Office Calc har ofte brug for at læse og skrive værdier fra/til ark, Denne hjælpeside beskriver de forskellige tilgange til at tilgå ark og områder for at læse eller skrive deres værdier.

note

Alle eksempler præsenteres på denne side kan implementeres i både Basic og Python.


Tilgang til en enkelt celle

Eksemplet herunder indsætter den numeriske værdi 123 i celle "A1" i de aktuelle ark.

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

Det samme kan opnå med Python:

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

Bemærk, at cellen i de foregående eksempler tilgås med den område navn "A1". Det er også muligt at tilgå celler med indekser som om arket var en matrix, hvor kolonner og rækker er indekseret begyndende fra nul.

Dette kan gøres med metoden getCellByPosition(colIndex, rowIndex), der bruger et kolonne- og et rækkeindeks. Eksemplet herunder i Basic ændrer tekstværdien i celle "C1" (kolonne 2, række 0).

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

Dette eksempel kan også implementeres i Python som følger:

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

Hovedforskellen mellem Python- og Basic-script ligger i, hvordan du får adgang til arkobjektet med kontekstvariablen XSCRIPTCONTEXT. Derefter er alle metoder og egenskaber identiske i Basic og Python.


Værdier, strenge og formler

Calc-celler kan have tre typer værdier: numeriske, strenge og formler. Hver type har sine egne metoder til at sætte og hente:

Type

Get Method

Set Method

Numerisk

getValue()

setValue(newValue)

Tekst

getString()

setString(newString)

Formel

getFormula()

setFormula(newFormula)


note

Datoer og valutaværdier betragtes som numeriske værdier i Calc.


Det følgende eksempel indsætter numeriske værdier i cellerne "A1" og "A2" og indsætter en formel i celle "A3", der returnerer multiplikationen af disse værdier.

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åder i forskellige ark

De foregående eksempler benytte udelukkende de aktive ark til at udføre handlinger. Det er muligt at tilgå celleområder på forskellige ark efter indekser eller navn.

Eksemplet herunder indsætter en numerisk værdi i celle "A1" på arket ved navn "Sheet2".

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

Dette eksempel kan også implementeres i Python som følger:

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

Ark kan også tilgås ved at bruge nulbaserede indekser, som angiver, hvilket ark ud fra den rækkefølge, de vises i Calc-filen.

I stedet for at bruge metoden getByName bruger du i Basic Sheets(sheetIndex) som vist herefter:

oSheet = ThisComponent.Sheets(0)

Dette kan gøres på en lignende måde i Python:

sheet = doc.Sheets[0]

Med biblioteket ScriptForge

Calc-tjenesten i ScriptForge-biblioteket kan bruges til at hente og angive celleværdier som følger:

' Indlæser ScriptForge-biblioteket
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
' Får adgang til det aktuelle Calc-dokument
oDoc = CreateScriptService("Calc")
' Angiver værdien i cellerne A1 og A2
oDoc.setValue("A1", "Hello")
oDoc.setValue("A2", 123)
note

Metoden setValue kan bruges til at angive både numeriske og tekstværdier. For at angive en celleformel bruger du metoden setFormula.


Med Calc-tjenesten kan hentning og angivelse af celleværdier gøres med en enkelt kodelinje. Eksemplet herunder henter værdien fra celle "A1" og viser den i et beskedfelt.

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

ScriptForge-biblioteket gør det også lettere at få adgang til områder i forskellige ark, som vist i eksemplet herunder:

Dim val1, val2
' Henter celle "A1" fra arket kaldet "Sheet1"
val1 = oDoc.getValue("Sheet1.A1")
' Henter celle "B3" fra arket kaldet "Sheet2"
val2 = oDoc.getValue("Sheet2.B3")
' Placerer resultatet i celle "A1" på arket "Rapport"
Dim result : result = val1 * val2
oDoc.setValue("Report.A1", result)

Eksemplerne ovenfor kan også implementeres i Python som følger:

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øt os venligst!