Contenuto
Indice 🔎︎

# Leggere e scrivere valori negli intervalli di celle

Le macro di LibreOfficeDev 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.

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

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)

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)

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, potete ottenere ed 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 dialogo.

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

La libreria ScriptForge rende inoltre più semplice l'accesso ad intervalli di celle di foglio differenti, come dimostrato nel seguente esempio:

        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)

Argomenti correlati

La libreria ScriptForge

Servizio SFDocuments.Calc

Programmare con script Python