Leggere e scrivere valori negli intervalli di celle

Le macro di LibreOffice 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!