Leggere e scrivere valori negli intervalli di celle

Le macro di Collabora Office Calc spesso richiedono di leggere e scrivere valori da/nei fogli. Questa pagina della guida in linea descrive i vari approcci per accedere ai fogli e agli intervalli di celle al fine di leggere o scrivere i loro valori.

note

Potete implementare tutti gli esempi presentati in questa pagina sia in Basic che in Python.


Accesso a una singola cella

L'esempio seguente inserisce il valore numerico 123 nella cella "A1" del foglio corrente.

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

Potete ottenere lo stesso con Python:

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

Tenete presente che negli esempi precedenti l'accesso alla cella è consentito usando il nome del suo intervallo "A1". Potete accedere alla celle anche mediante gli indici, come se il foglio fosse una matrice, nella quale le colonne e le righe sono rappresentate da indici a partire da zero.

A tale scopo utilizzate il metodo getCellByPosition(colIndex, rowIndex), che richiede l'indice di una colonna e di una riga. L'esempio seguente in Basic modifica il valore del testo nella cella "C1" (colonna 2, riga 0).

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

Potete implementare lo stesso esempio in Python come segue:

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

La differenza principale tra gli script in Python e Basic risiede nel modo di ottenere l'accesso all'oggetto che rappresenta il foglio usando la variabile di contesto XSCRIPTCONTEXT. Dopodiché tutti i metodi e le proprietà sono identiche in Basic e in Python.


Valori, stringhe e formule

Le celle di Calc possono avere tre tipi di valori: numerici, stringhe e formule. Ogni tipo ha i suoi metodi "set" e "get":

Tipo

Get Method

Set Method

Numerico

getValue()

setValue(newValue)

Testo

getString()

setString(newString)

Formula

getFormula()

setFormula(newFormula)


note

In Calc, le date e le valute sono considerate valori numerici.


L'esempio seguente inserisce dei valori numerici nelle celle "A1" e "A2" e una formula nella cella "A3", che restituisce la moltiplicazione di tali valori.

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

Accedere a intervalli di celle di fogli differenti

Gli esempi precedenti eseguivano operazioni solamente sul foglio attivo. Potete accedere a intervalli di celle di fogli diversi in base ai relativi indici o nomi.

L'esempio seguente inserisce un valore numerico nella cella "A1" del foglio denominato "Sheet2".

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

Potete implementare lo stesso esempio in Python come segue:

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

Potete accedere ai fogli anche usando degli indici a partire da zero che indicano il foglio in base all'ordine con cui appaiono nel file di Calc.

In Basic, anziché usare il metodo getByName, utilizzate Sheets(sheetIndex) come mostrato di seguito:

oSheet = ThisComponent.Sheets(0)

Potete procedere in modo analogo in Python:

sheet = doc.Sheets[0]

Utilizzare la libreria ScriptForge

Potete usare il servizio Calc della libreria ScriptForge per ottenere ed impostare i valori delle celle come segue:

' Carica la libreria ScriptForge
GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
' Ottiene l'accesso al documento corrente di Calc
oDoc = CreateScriptService("Calc")
' Imposta il valore delle celle A1 e A2
oDoc.setValue("A1", "Hello")
oDoc.setValue("A2", 123)
note

Potete usare il metodo setValue per impostare valori sia numerici, sia di testo. Per impostare la formula di una cella, usate il metodo setFormula.


Con il servizio Calc, è possibile ottenere e impostare i valori delle celle con una singola linea di codice. L'esempio sottostante ottiene il valore della cella "A1" e lo visualizza in una finestra di messaggio.

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

La libreria ScriptForge semplifica anche l'accesso agli intervalli in fogli diversi, come dimostrato nell'esempio seguente:

Dim val1, val2
' Ottiene la cella "A1" dal foglio denominato "Sheet1"
val1 = oDoc.getValue("Sheet1.A1")
' Ottiene la cella "B3" dal foglio denominato "Sheet2"
val2 = oDoc.getValue("Sheet2.B3")
' Inserisce il risultato nella cella "A1" del foglio "Report"
Dim result : result = val1 * val2
oDoc.setValue("Report.A1", result)

Potete implementare gli esempi sopra riportati in Python, come segue:

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)

Sosteneteci!