Lectura e escritura de valores nos intervalos

As macros no Calc do LibreOffice deben ler e escribir valores decotío en follas de cálculo. Esta páxina da axuda describe os diversos enfoques para acceder a follas e intervalos e ler ou escribir os seus valores.

note

Todos os exemplos presentados nesta páxina poden ser implementados tanto en BASIC como en Python.


Acceder a unha única cela

O seguinte exemplo introduce o valor numérico 123 na cela «A1» da folla activa.


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

Pódese lograr o mesmo con Python:


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

Observe que, nos exemplos anteriores, a cela é accesíbel utilizando o nome de intervalo «A1». Tamén é posíbel acceder ás celas con axuda de índices, como se a folla fose unha matriz na que as columnas e filas están indexadas a partir de cero.

Isto pódese facer empregando o método getCellByPosition(colIndex, rowIndex), que toma un índice de columna e de fila. O exemplo de abaixo en Basic cambia o valor do texto da cela «C1» (columna 2, fila 0).


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

Este exemplo tamén se pode implementar en Python deste xeito:


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

A diferenza principal entre os scripts en Python e en Basic reside na maneira na que se accede ao obxecto da folla empregando a variábel de contexto XSCRIPTCONTEXT. Despois disto, todos os métodos e propiedades son idénticos en Basic e en Python.


Valores, cadeas e fórmulas

As celas do Calc poden ter tres tipos de valores: números, cadeas e fórmulas. Cada tipo ten os seus métodos de definición e lectura de valores:

Tipo

Get Method

Set Method

Numérico

getValue()

setValue(newValue)

Texto

getString()

setString(newString)

Fórmula

getFormula()

setFormula(newFormula)


note

As datas e os valores monetarios considéranse valores numéricos no Calc.


O exemplo seguinte introduce valores numéricos nas celas «A1» e «A2» e insire unha fórmula na cela «A3» que devolve a multiplicación destes valores.


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

Acceder a intervalos en follas diferentes

Os exemplos anteriores empregan só a folla activa para realizar operacións. É posíbel acceder a intervalos de celas en follas diferentes polos seus índices ou nomes.

O exemplo de abaixo introduce un valor numérico na cela «A1» da folla chamada «Sheet2».


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

Este exemplo tamén se pode implementar en Python deste xeito:


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

Tamén é posíbel acceder ás follas empregando índices que comecen en cero que indican a folla considerando a orde na que aparecen no ficheiro de Calc.

En Basic, no canto de empregar o método getByName, empregue Sheets(sheetIndex), como se mostra aquí:


    oSheet = ThisComponent.Sheets(0)
  

Isto pódese facer de forma semellante en Python:


    sheet = doc.Sheets[0]
  

Empregando a biblioteca ScriptForge

Pódese empregar o servizo de Calc da biblioteca ScriptForge para obter e definir valores deste xeito:


    

' Carga a biblioteca ScriptForge

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Obtén acceso ao documento de Calc actual

oDoc = CreateScriptService("Calc")

' Define o valor das celas A1 e A2

oDoc.setValue("A1", "Hello")

oDoc.setValue("A2", 123)

note

Pódese empregar o método setValue para definir valores tanto numéricos como textuais. Para definir unha fórmula nunha cela empregue o método setFormula.


Co servizo de Calc, pódense obter e definir valores de celas cunha única liña de código. O exemplo de abaixo obtén o valor da cela «A1» e móstrao nunha caixa de mensaxe.


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

A biblioteca ScriptForge tamén simplifica o acceso a intervalos en follas diferentes, como se demostra no exemplo de abaixo:


    Dim val1, val2
    ' Obtén a cela «A1» da folla «Sheet1»
    val1 = oDoc.getValue("Sheet1.A1")
    ' Obtén a cela «B3» da folla «Sheet2»
    val2 = oDoc.getValue("Sheet2.B3")
    ' Coloca o resultado na cela «A1» da folla «Report»
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  

Tamén é posíbel implementar os exemplos anteriores en Python deste xeito:


    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)
  

Precisamos da súa axuda!