Guida di LibreOffice 25.2
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.
È possibile implementare tutti gli esempi presentati in questa pagina sia in Basic, sia in Python.
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)
  È possibile ottenere lo stesso con Python:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Tenere presente che negli esempi precedenti l'accesso alla cella è consentito usando il nome del suo intervallo "A1". È possibile 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 utilizzare 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")
  È possibile implementare lo stesso esempio in Python come segue:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellByPosition(2, 0)
    cell.setString("Hello")
  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.
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) | 
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")
  Gli esempi precedenti eseguivano operazioni solamente sul foglio attivo. È possibile 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)
  È possibile implementare lo stesso esempio in Python come segue:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Sheet2"]
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  È possibile 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, utilizzare Sheets(sheetIndex) come mostrato di seguito:
    oSheet = ThisComponent.Sheets(0)
  È possibile procedere in modo analogo in Python:
    sheet = doc.Sheets[0]
  È possibile usare il servizio Calc della libreria ScriptForge per ottenere e 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)
  È possibile usare il metodo setValue per impostare valori sia numerici, sia di testo. Per impostare la formula di una cella, usare 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)
  È possibile 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)