domingo, 29 de junio de 2025

Datos. OOo Basic

Cálculo del número de elementos


Trabajando con Calc, para saber cuántos elementos tiene una variable (n) únicamente necesitamos echar un vistazo a la columna en la que hemos guardado los datos: normalmente suele ser el identificador numérico Fila menos 1 (vg. 482 - 1 = 481), debido a que la primera fila suele estar ocupada por el identificador o nombre de la variable. El problema es que este sencillo procedimiento no nos permite automatizar determinadas operaciones, o no del todo.


Para automatizar la identificación del valor n (o N) de una variable (cuántos elementos tiene) podemos aplicar el siguiente procedimiento, que es mucho más largo y complejo que el anterior, pero que nos permite prescindir de la participación humana, que es en lo que consiste automatizar un procedimiento.

Sub NumeroElementos

Dim oHoja As Object, oCelda As Object
Dim Hoja As String, Col As String
Dim Tipo As Integer, i As Integer, n As Integer

Hoja = "Listado"
Col = "D"
n = 0
oHoja = ThisComponent.getSheets().getByName(Hoja)

For i = 0 To 1000
oCelda = oHoja.getCellRangeByName(Col & i+2)
Tipo = oCelda.getType
If Tipo <> 0 Then
n = n + 1
ElseIf Tipo = 0 Then
Exit For
End If
Next

MsgBox n

End Sub

Podemos darle otra formulación a este script (por ejemplo, en formularlo como función), y prescindir de determinadas instrucciones (vg. MsgBox n), pero en esencia lo que hacemos es lo siguiente:
  • Accedemos a la hoja (oHoja = ThisComponent.getSheets().getByName(Hoja))
  • ... y a la celda (oCelda = oHoja.getCellRangeByName(Col & i+2))
  • en este caso dentro de un bucle For (For i = 0 To 1000) que nos permite recorrer el conjunto de la columna condicionando el procedimiento de acceso al contenido (Tipo = oCelda.getType)...
  • mediante un condicional If complejo asociado al valor resultante
  • para incrementar un numeral de conteo en caso positivo (If Tipo > 0 Then) -> (n = n + 1)
  • o salir del bucle en caso negativo (ElseIf Tipo = 0 Then) -> (Exit For)

No hay comentarios:

Publicar un comentario

Comenta esta entrada