Configuración global de Calc
En este capitulo, veremos algunas opciones que afectan a la configuración global de Calc, por ejemplo, lo que queremos ver y lo que no.
Sub ConfigurarCalc1()
Dim oDoc As Object
Dim oCC As Object
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Mostramos las formulas en vez de su resultado
'el valor "normal" es falso (False)
oCC.showFormulas = True
'Ocultamos los valores cero
'el valor normal es verdadero (True)
oCC.showZeroValues = False
'Podemos automáticamente diferenciar los valores de
'formulas con esta propiedad, los valores los pone
'en azul y las formulas en verde, pero ten cuidado
'no podrás establecer el color de fuente mientras
'esta propiedad este en verdadera (True)
oCC.IsValueHighlightingEnabled = True
'Esta propiedad, solo oculta el pequeño cuadro rojo
'que nos indica que una celda tiene una nota, la nota
'sigue existiendo, establecelo en verdadero para volver
'a ver este pequeño cuadro
oCC.showNotes = False
End Sub
También podemos mostrar u ocultar otros elementos de la hoja de calculo, en todos los ejemplos siguientes, alternamos el valor de las propiedades, es decir, si están visibles se ocultan y viceversa:
Sub ConfigurarCalc2()
Dim oDoc As Object
Dim oCC As Object
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Ocultamos o mostramos las barras de desplazamiento
'tanto vertical como horizontal
oCC.HasVerticalScrollBar = Not oCC.HasVerticalScrollBar
oCC.HasHorizontalScrollBar = Not oCC.HasHorizontalScrollBar
'Las etiqueas de las hojas
oCC.HasSheetTabs = Not oCC.HasSheetTabs
'Los encabezados de filas y columnas
oCC.HasColumnRowHeaders = Not oCC.HasColumnRowHeaders
'Las líneas de división de las celdas
oCC.showGrid = Not oCC.showGrid
'Las líneas de ayuda cuando se mueve un objeto gráfico
oCC.showHelpLines = Not oCC.ShowHelpLines
'El icono de anclaje cuando se selecciona un objeto gráfico
oCC.showAnchor = Not oCC.ShowAnchor
'Los saltos de página
oCC.showPageBreaks = Not oCC.ShowPageBreaks
'Los objetos e imagenes
oCC.showObjects = Not oCC.showObjects
'Los gráficos
oCC.showCharts = Not oCC.showCharts
'Las formas
oCC.showDrawing = Not oCC.showDrawing
'Los símbolos de esquema y agrupamiento
oCC.IsOutlineSymbolsSet = Not oCC.IsOutlineSymbolsSet
End Sub
Ten cuidado con ocultar algunos elementos, por ejemplo, si ocultas las etiquetas de las hojas, el usuario puede cambiarse aun con la combinación de teclas CTRL+RePag (AvPag), los saltos de página se ocultan, pero siguen existiendo, así como los gráficos, objetos, formas y símbolos de esquema. En el siguiente ejemplo, cambiamos el color de las líneas de división de las celdas y establecemos el zoom con un porcentaje.
Sub ConfigurarCalc3()
Dim oDoc As Object
Dim oCC As Object
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Puedes cambiar el color de las líneas de división de celdas
'el valor predeterminado es gris claro = 12632256
oCC.gridColor = RGB(Rnd()*255,Rnd()*255,Rnd()*255)
'Establecer el tipo de Zoom
' 1 = Ancho de página
' 2 = Ajustar al ancho y alto
' 3 = Valor
oCC.ZoomType = 3
'Si lo establece en 3 (valor), puedes establecer
'el porcentaje de zoom entre 20% y 400%
oCC.ZoomValue = 130
End Sub
Si estableces el porcentaje fuera de sus limites (20% a 400%), este se ajustará al más cercano. Las siguientes propiedades, solo tiene efecto sobre una sola hoja, pero me parece que son interesantes de ver. Podemos consultar y establecer la primer fila y columna visible.
Sub ConfigurarCalc4()
Dim oDoc As Object
Dim oCC As Object
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'La primer fila y columna visible actuales
MsgBox "Fila: " & oCC.getFirstVisibleRow & Chr(13) & "Columna: " & oCC.getFirstVisibleColumn
'Lo interesante, es que podemos establecerlas para que el usuario
'vea lo que queramos que vea
oCC.setFirstVisibleRow( 50 )
oCC.setFirstVisibleColumn( 10 )
End Sub
Podemos obtener el rango visible, como mostramos en el ejemplo, este rango se ve afectado por el nivel de zoom establecido en la hoja.
Sub ConfigurarCalc5()
Dim oDoc As Object
Dim oCC As Object
Dim oRangoVisible As Object
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Obtenemos el rango visible
oRangoVisible = oCC.getVisibleRange()
'Mostramos su dirección
MsgBox DireccionRango( oRangoVisible )
'Cambiamos el zoom
oCC.ZoomType = 3
oCC.ZoomValue = oCC.ZoomValue + 25
'Volvemos a consultar el rango visible
oRangoVisible = oCC.getVisibleRange()
MsgBox DireccionRango( oRangoVisible )
End Sub
Function DireccionRango( DirRango As Object) As String
Dim oHA As Object
Dim sTmp As String
oHA = ThisComponent.getCurrentController.getActiveSheet
sTmp = oHA.getColumns.getByIndex(DirRango.StartColumn).getName() & _
DirRango.StartRow + 1 & ":" & _
oHA.getColumns.getByIndex(DirRango.EndColumn).getName() & _
DirRango.EndRow + 1
DireccionRango = sTmp
End Function
Podemos saber si la ventana esta dividida.
Sub ConfigurarCalc6()
Dim oDoc As Object
Dim oCC As Object
Dim sInfo As String
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Consultamos si la ventana esta dividida
If oCC.getIsWindowSplit Then
'Mostramos la información
sInfo = "La ventana esta dividida a: " & Chr(13) & _
oCC.getSplitHorizontal & " pixeles de la izquierda y" & Chr(13) & _
oCC.getSplitVertical & " pixeles de la parte superior" & Chr(13) & _
"En la columna: " & oCC.getSplitColumn & " y en la fila: " & oCC.getSplitRow
MsgBox sInfo
Else
MsgBox "La ventana no esta dividida"
End If
End Sub
Por supuesto podemos establecer la división donde quieras.
Sub ConfigurarCalc7()
Dim oDoc As Object
Dim oCC As Object
Dim sInfo As String
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Si no esta dividida la dividimos
If Not oCC.getIsWindowSplit Then
'Las unidades son pixeles
oCC.splitAtPosition( 500,300 )
End If
End Sub
Si quieres establecer solo una división, establece la que no quieras en cero, por ejemplo, si solo quieres la división vertical usas.
oCC.splitAtPosition( 500,0 )
Para la horizontal.
oCC.splitAtPosition( 0,300 )
Para eliminar la división.
oCC.splitAtPosition( 0,0 )
También podemos saber si la ventana esta fija.
Sub ConfigurarCalc8()
Dim oDoc As Object
Dim oCC As Object
Dim sInfo As String
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Consultamos si la ventana esta fija
If oCC.hasFrozenPanes Then
MsgBox "La ventana esta fija"
Else
MsgBox "La ventana no esta fija"
End If
End Sub
Y establecer la posición de esta, aquí se usa la columna y fila deseada.
Sub ConfigurarCalc9()
Dim oDoc As Object
Dim oCC As Object
Dim sInfo As String
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'Establecemos la división en la columna 5 y fila 10
oCC.freezeAtPosition( 5, 10)
End Sub
Al igual que con la ventana dividida, si quiere establecer solo un sentido, establece el otro en cero, si estableces los dos argumentos en ceros, no eliminaras la división, si que la ventana se fijara en la posición actual del cursor de celda.
oCC.freezeAtPosition( 0, 0)
Si quieres quitarla, usa el mismo método visto anteriormente.
oCC.splitAtPosition( 0,0 )
Si divides la ventana por cualquiera de los dos métodos vistos, estás pueden tener 2 o cuatro partes, cada una de estas partes se llama panel, y puedes tener acceso a cada rango de cada panel, como se muestra en el siguiente ejemplo.
Sub ConfigurarCalc10()
Dim oDoc As Object
Dim oCC As Object
Dim oPanel As Object
Dim co1 As Byte
Dim sInfo As String
oDoc = ThisComponent
oCC = oDoc.getCurrentController()
'La ventans debe estar fija o dividida
If oCC.getIsWindowSplit Or oCC.hasFrozenPanes Then
For co1 = 0 To oCC.getCount - 1
'Obtenemos acceso a cada panel
oPanel = oCC.getByIndex( co1 )
'Mostramos su dirección
MsgBox "La dirección del Panel " & co1+1 & " es: " & DireccionRango2( oPanel.getReferredCells )
Next co1
End If
End Sub
Function DireccionRango2(Rango As Object) As String
Dim sTmp As String
Select Case Rango.getImplementationName()
Case "ScCellObj"
sTmp = Rango.getSpreadsheet.getName() & "." & _
Rango.getColumns().getByIndex(0).getName() & _
Rango.getCellAddress.Row + 1
Case "ScCellRangeObj", "ScCellCursorObj"
sTmp = Rango.getSpreadsheet.getName() & "." & _
Rango.getColumns().getByIndex(0).getName() & _
Rango.getRangeAddress.StartRow + 1 & ":" & _
Rango.getColumns().getByIndex(Rango.getColumns().getCount()-1).getName() & _
Rango.getRangeAddress.EndRow + 1
Case "ScCellRangesObj"
sTmp = Join( Split(Rango.getRangeAddressesAsString(),";"),Chr(13) )
End Select
DireccionRango2 = sTmp
End Function
La función anterior ya la hemos usado anteriormente, aquí la repetimos por si no la tienes a mano, y con esto damos por terminado un nuevo tema.
| Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO, o quieres ampliar la información, no dudes en dirigirte al Foro Oficial en español de Apache OpenOffice para Macros y API UNO |
