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!