Ajuda del LibreOffice 24.8
Les macros a Calc LibreOffice sovint necessiten llegir i escriure valors de/a fulls. Aquesta pàgina d'ajuda descriu els diferents enfocaments per accedir a fulls i intervals per llegir o escriure els seus valors.
Els exemples que es presenten en aquesta pàgina poden implementar-se tant en Basic com en Python.
L'exemple següent introdueix el valor numèric 123 a la cel·la "A1" del full actual.
    Dim oSheet as Object
    Dim oCell as Object
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  El mateix es pot aconseguir en Python:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  Tingueu en compte que en els exemples anteriors s'accedeix a la cel·la utilitzant el seu nom d'interval "A1". També és possible accedir a les cel·les mitjançant índexs com si el full fos una matriu on s'indexen columnes i files a partir de zero.
Es pot realitzar utilitzant el mètode getCellByPosition(colIndex, rowIndex), que agafa un índex de columna i fila. L'exemple següent en Basic canvia el valor del text a la cel·la "C1" (columna 2, fila 0).
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellByPosition(2, 0)
    oCell.setString("Hello")
  Aquest exemple també es pot implementar en Python de la següent manera:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellByPosition(2, 0)
    cell.setString("Hello")
  La principal diferència entre els scripts Python i Basic rau en com accedir a l'objecte full utilitzant la variable de context XSCRIPTCONTEXT. Després d'això, tots els mètodes i propietats són idèntics tant en Basic com en Python.
Les cel·les del Calc tenen tres tipus de valors: numèric, cadena i fórmula. Cada tipus té mètodes de lectura i escriptura propis:
| Tipus | Get Method | Set Method | 
|---|---|---|
| Numèric | getValue() | setValue(newValue) | 
| Text | getString() | setString(newString) | 
| Fórmula | getFormula() | setFormula(newFormula) | 
Els valors de les dates i les monedes es consideren numèriques a Calc.
L'exemple següent introdueix valors numèrics a les cel·les "A1" i "A2" i insereix una fórmula a la cel·la "A3" que retorna la multiplicació d'aquests valors.
    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")
  Els exemples anteriors utilitzaven només el full actiu per realitzar operacions. És possible accedir a rangs de cel·les de diferents fulls mitjançant els índexs o noms dels fulls.
L'exemple següent introdueix un valor numèric a la cel·la "A1" del full anomenat "Full2".
    oSheet = ThisComponent.Sheets.getByName("Sheet2")
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  Aquest exemple també es pot implementar en Python de la següent manera:
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Sheet2"]
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  També es pot accedir als fulls mitjançant índexs de base zero que indiquen el full tenint en compte l'ordre en què apareixen al fitxer Calc.
En Basic, en comptes d'utilitzar el mètode getByName, utilitzeu Sheets(indexFull) com es mostra a continuació:
    oSheet = ThisComponent.Sheets(0)
  Això es pot fer d'una manera semblant en Python:
    sheet = doc.Sheets[0]
  El servei Calc de la biblioteca ScriptForge es pot usar per a obtenir i modificar els valors de les cel·les així:
    ' Carrega la biblioteca ScriptForge
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    ' Obté accés al document del Calc actual
    oDoc = CreateScriptService("Calc")
    ' Estableix el valor de les cel·les A1 i A2
    oDoc.setValue("A1", "Hello")
    oDoc.setValue("A2", 123)
  El mètode setValue es pot utilitzar per establir valors text i numèrics. Per establir una formula en una cel·la, utilitzeu el mètode setFormula.
Amb el servei Calc, obtenir i establir valors de cel·la es pot fer amb una única línia de codi. L'exemple següent obté el valor de la cel·la "A1" i el mostra en un quadre de missatge.
    Dim val as Variant, oDoc as Object
    oDoc = CreateScriptService("Calc")
    val = oDoc.getValue("A1")
    MsgBox val
  La biblioteca ScriptForge també simplifica l'accés als intervals d'altres fulls, com es demostra a l'exemple següent:
    Dim val1, val2
    ' Obté la cel·la "A1" del full "Full1"
    val1 = oDoc.getValue("Sheet1.A1")
    ' Obté la cel·la "B3" del full anomenat "Full2"
    val2 = oDoc.getValue("Sheet2.B3")
    ' Col·loca el resultat a la cel·la "A1" del full "Informe"
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  Els exemples anteriors també es poden implementar en Python així:
    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)