Difference between revisions of "ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConCalc/DandoFormato/FormatoDeCeldas"
(Created page with "{{DISPLAYTITLE:Formato de celdas}} {{ES/AyudaWiki/Borrador}} Primero las características de formato más usuales, tipo de fuente, tamaño, negritas, cursiva y subrayado. <s...") |
|||
Line 27: | Line 27: | ||
− | Para saber la lista completa de fuentes ({{TextColor|Blue|CharFontName}}) que tienes disponibles en OpenOffice.org, usa las macros disponibles en: [ | + | Para saber la lista completa de fuentes ({{TextColor|Blue|CharFontName}}) que tienes disponibles en OpenOffice.org, usa las macros disponibles en: [[ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/Apendices/ListaFuentesCalc|Listar fuentes en un archivo de Calc]] |
Latest revision as of 16:59, 18 March 2013
Primero las características de formato más usuales, tipo de fuente, tamaño, negritas, cursiva y subrayado.
Sub FormatoCeldas1()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
With oSel
'Tipo de letra
.CharFontName = "Liberation Sans"
'Tamaño de letra
.CharHeight = 20
'Negritas
.CharWeight = 150
'Cursiva o italica
.CharPosture = 2
'Subrayado
.CharUnderline = 1
End With
End Sub
Para saber la lista completa de fuentes (CharFontName) que tienes disponibles en OpenOffice.org, usa las macros disponibles en: Listar fuentes en un archivo de Calc
El tamaño de la fuente (CharHeight) se establece en puntos, recordando que un punto es igual a 1/72 de pulgada, aproximadamente 0.3528 mm.
El estilo negritas se establece por cualquiera de las siguiente constantes, de las cuales, excepto los extremos, no hay muchas variantes entre ellas.
Constante | Valor |
---|---|
com.sun.star.awt.FontWeight.DONTKNOW | 0 |
com.sun.star.awt.FontWeight.THIN | 50 |
com.sun.star.awt.FontWeight.ULTRALIGHT | 60 |
com.sun.star.awt.FontWeight.LIGHT | 75 |
com.sun.star.awt.FontWeight.SEMILIGHT | 90 |
com.sun.star.awt.FontWeight.NORMAL | 100 |
com.sun.star.awt.FontWeight.SEMIBOLD | 110 |
com.sun.star.awt.FontWeight.BOLD | 150 |
com.sun.star.awt.FontWeight.ULTRABOLD | 175 |
com.sun.star.awt.FontWeight.BLACK | 200 |
Al estilo cursiva o itálica le corresponden las siguiente constantes.
Constante | Valor |
---|---|
com.sun.star.awt.FontSlant.NONE | 0 |
com.sun.star.awt.FontSlant.OBLIQUE | 1 |
com.sun.star.awt.FontSlant.ITALIC | 2 |
com.sun.star.awt.FontSlant.DONTKNOW | 3 |
com.sun.star.awt.FontSlant.REVERSE_OBLIQUE | 4 |
com.sun.star.awt.FontSlant.REVERSE_ITALIC | 5 |
El tipo de subrayado esta determinado por las constantes.
Constante | Valor |
---|---|
com.sun.star.awt.FontUnderline.NONE | 0 |
com.sun.star.awt.FontUnderline.SINGLE | 1 |
com.sun.star.awt.FontUnderline.DOUBLE | 2 |
com.sun.star.awt.FontUnderline.DOTTED | 3 |
com.sun.star.awt.FontUnderline.DONTKNOW | 4 |
com.sun.star.awt.FontUnderline.DASH | 5 |
com.sun.star.awt.FontUnderline.LONGDASH | 6 |
com.sun.star.awt.FontUnderline.DASHDOT | 7 |
com.sun.star.awt.FontUnderline.DASHDOTDOT | 8 |
com.sun.star.awt.FontUnderline.SMALLWAVE | 9 |
com.sun.star.awt.FontUnderline.WAVE | 10 |
com.sun.star.awt.FontUnderline.DOUBLEWAVE | 11 |
com.sun.star.awt.FontUnderline.BOLD | 12 |
com.sun.star.awt.FontUnderline.BOLDDOTTED | 13 |
com.sun.star.awt.FontUnderline.BOLDDASH | 14 |
com.sun.star.awt.FontUnderline.BOLDLONGDASH | 15 |
com.sun.star.awt.FontUnderline.BOLDDASHDOT | 16 |
com.sun.star.awt.FontUnderline.BOLDDASHDOTDOT | 17 |
com.sun.star.awt.FontUnderline.BOLDWAVE | 18 |
Recuerda que puedes usar tanto las constantes como el valor de estas, según tu gusto y criterio. Algunos de los valores de estas constantes, los puedes establecer pero no veras ningún efecto aparente.
Algunas otras opciones de formato de fuente son.
Sub FormatoCeldas2()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
With oSel
'Espacios sin subrayar
.CharWordMode = True
'Tachado de fuente
.CharCrossedOut = True
'Contorno de fuente
.CharContoured = True
End With
End Sub
Cuando se subraya la fuente y la propiedad CharWordMode se establece en verdadera (True), te deja los espacios entre palabras sin subrayar. Las otras dos propiedades creo que son bastante autoexplicativas.
Ahora, veamos algo muy divertido, el color, establezcamos el color de la fuente y del subrayado de esta.
Sub FormatoCeldas3()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
With oSel
'Color de la fuente azul
.CharColor = RGB( 0,0,255 )
'Estilo de subrayado
.CharUnderline = 1
'Color de subrayado rojo
.CharUnderlineColor = RGB(255,0,0,)
'Si se muestra el color
.CharUnderlineHasColor = True
End With
End Sub
Con la propiedad CharColor y la ayuda de la función RGB, establecemos el color de la fuente, para el subrayado, primero establecemos el estilo (CharUnderline), después el color de este (CharUnderlineColor) y por ultimo establecemos si queremos que se muestre el color (CharUnderlineHasColor), si esta propiedad se establece en falso (false), el color del subrayado será del mismo color que el de la fuente.
Con la siguiente macro, a cada celda del rango seleccionado se le establecerá un color de fuente y de subrayado aleatorio.
Sub FormatoCeldas4()
Dim oSel As Object
Dim col As Long
Dim fil As Long
oSel = ThisComponent.getCurrentSelection()
If oSel.getImplementationName = "ScCellRangeObj" Then
With oSel
For col = 0 To oSel.getColumns.getCount - 1
For fil = 0 To oSel.getRows.getCount - 1
With .getCellByPosition( col, fil )
.CharColor = RGB( Rnd()*255,Rnd()*255,Rnd()*255 )
.CharUnderline = 1
.CharUnderlineColor = RGB( Rnd()*255,Rnd()*255,Rnd()*255)
.CharUnderlineHasColor = True
End With
Next
Next
End With
End If
End Sub
La alineación del contenido de la celda, se establece con las propiedades VertJustify para el sentido vertical y HoriJustify para el sentido horizontal de la siguiente forma.
Sub FormatoCeldas5()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Alineamos en medio verticalmente
oSel.VertJustify = 2
'Alineamos centrado horizontalmente
oSel.HoriJustify = 2
End Sub
Los valores posibles para cada propiedad son:
Propiedad VertJustify | Valor |
---|---|
com.sun.star.table.CellVertJustify.STANDARD | 0 |
com.sun.star.table.CellVertJustify.TOP | 1 |
com.sun.star.table.CellVertJustify.CENTER | 2 |
com.sun.star.table.CellVertJustify.BOTTOM | 3 |
Propiedad HoriJustify | Valor |
---|---|
com.sun.star.table.CellHoriJustify.STANDARD | 0 |
com.sun.star.table.CellHoriJustify.LEFT | 1 |
com.sun.star.table.CellHoriJustify.CENTER | 2 |
com.sun.star.table.CellHoriJustify.RIGHT | 3 |
com.sun.star.table.CellHoriJustify.BLOCK | 4 |
com.sun.star.table.CellHoriJustify.REPEAT | 5 |
Con la combinación de estos valores, tenemos muchas posibilidades de alineación de una celda. La constante com.sun.star.table.CellHoriJustify.REPEAT, es muy interesante por que te repite el valor de la celda hasta llenar el ancho de ella, prueba a establecer esta propiedad en una celda cuyo contenido sea un punto para que notes su comportamiento.
Si queremos ajustar el texto automáticamente en la celda, usamos.
Sub FormatoCeldas6()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Ajuste de texto
oSel.IsTextWrapped = True
End Sub
Si queremos reducir el texto hasta que quepa en la celda, usamos.
Sub FormatoCeldas7()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Reducción de texto
oSel.ShrinkToFit =True
End Sub
Si queremos cambiar la orientación del texto.
Sub FormatoCeldas8()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Orientacion vertical del texto
oSel.Orientation = 3
End Sub
Los valores para esta propiedad son:
Propiedad Orientation | Valor |
---|---|
com.sun.star.table.CellOrientation.STANDARD | 0 |
com.sun.star.table.CellOrientation.TOPBOTTOM | 1 |
com.sun.star.table.CellOrientation.BOTTOMTOP | 2 |
com.sun.star.table.CellOrientation.STACKED | 3 |
O podemos establecer el ángulo de rotación.
Sub FormatoCeldas9()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
oSel.RotateAngle = 9000
End Sub
El valor del ángulo esta dado en centésimas de ángulo, es decir, en el ejemplo anterior establecemos el ángulo en 90º (9000) para 180º podemos 18000 y así sucesivamente.
Toma en cuenta que algunas de las propiedades vistas hasta ahora, se autoexcluyen mutuamente, por lo que tienes que asegurarte que no se contraponen, de los dos ejemplos siguiente, solo el segundo es correcto.
Sub FormatoCeldas10()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
oSel.HoriJustify = 2
oSel.IsTextWrapped = True
'Tamaño de sangría
oSel.ParaIndent = 1000
End Sub
Sub FormatoCeldas11()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
oSel.HoriJustify = 1
oSel.IsTextWrapped = True
'Tamaño de sangría
oSel.ParaIndent = 1000
End Sub
También podemos establecer el color de fondo de las celdas.
Sub FormatoCeldas12()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Color del fondo de la celda (gris)
oSel.CellBackColor = RGB(200,200,200)
End Sub
La siguiente macro te colorea cada celda de la selección, tanto la fuente como el fondo de la celda de un color aleatorio:
Sub FormatoCeldas13()
Dim oSel As Object
Dim col As Long
Dim fil As Long
oSel = ThisComponent.getCurrentSelection()
If oSel.getImplementationName = "ScCellRangeObj" Then
With oSel
For col = 0 To oSel.getColumns.getCount - 1
For fil = 0 To oSel.getRows.getCount - 1
With .getCellByPosition( col, fil )
.CharColor = RGB( Rnd()*255,Rnd()*255,Rnd()*255 )
.CellBackColor = RGB( Rnd()*255,Rnd()*255,Rnd()*255 )
End With
Next
Next
End With
End If
End Sub
Los bordes de las celdas tienen muchas posibilidades, veamos algunas.
Sub FormatoCeldas14()
Dim oSel As Object
Dim oBordeLinea As New com.sun.star.table.BorderLine
oSel = ThisComponent.getCurrentSelection()
'Establecemos las características de la linea
With oBordeLinea
'El color (rojo)
.Color = RGB(255,0,0)
'El ancho de la linea exterior
.InnerLineWidth = 50
'El ancho de la linea interior
.OuterLineWidth = 50
'La distancia entre las lineas
.LineDistance = 20
End With
'Establecemos los bordes
With oSel
.TopBorder = oBordeLinea 'Superior
.BottomBorder = oBordeLinea 'Inferior
.LeftBorder = oBordeLinea 'Izquierdo
.RightBorder = oBordeLinea 'Derecho
End With
End Sub
El ancho de las lineas y la distancia entre ellas esta dada en centésimas de milímetros, si establecemos solo una de las dos líneas, veras una linea simple. Si deseas establecer también las líneas diagonales, usa la propiedad DiagonalTLBR para la línea que va desde la esquina superior izquierda a la inferior derecha y DiagonalBLTR para la que va de la esquina inferior izquierda a la superior derecha, tienes que establecerles la misma estructura de línea (com.sun.star.table.BorderLine) vista en los ejemplos.
El código anterior te establecerá el borde de cada celda del rango seleccionado, si quieres establecer el borde de solo los extremos del rango, tiene que usar la estructura TableBorder.
Sub FormatoCeldas15()
Dim oSel As Object
Dim oBordeLinea As New com.sun.star.table.BorderLine
Dim oBordeTabla As New com.sun.star.table.TableBorder
oSel = ThisComponent.getCurrentSelection()
'Establecemos las características de la linea
With oBordeLinea
'El color (azul)
.Color = RGB(0,0,255)
'El ancho de la linea interior
.OuterLineWidth = 75
End With
'Establecemos las características de la tabla
With oBordeTabla
.TopLine = oBordeLinea 'Superior
.IsTopLineValid = True
.BottomLine = oBordeLinea 'Inferior
.IsBottomLineValid = True
.LeftLine = oBordeLinea 'Izquierdo
.IsLeftLineValid = True
.RightLine = oBordeLinea 'Derecho
.IsRightLineValid = True
End With
'Establecemos los bordes
oSel.TableBorder = oBordeTabla
End Sub
Las propiedades IsTopLineValid, IsBottomLineValid, IsLeftLineValid y IsRightLineValid, tienes que establecerlas en verdadero (true) si quieres que se vea la línea.
Para establecer los margenes de la celda, usamos.
Sub FormatoCeldas16()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Para establecer los margenes de la celda
With oSel
.ParaTopMargin = 500 'Arriba
.ParaBottomMargin = 500 'Abajo
.ParaLeftMargin = 800 'Izquierda
.ParaRightMargin = 800 'Derecha
End With
End Sub
Para dar un formato predeterminado a la celda, usamos la propiedad NumerFormat, la cual es necesario establecer como un entero largo (long) correspondiente a la clave del formato que nos interese, por ejemplo.
Sub FormatoCeldas17()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Establecemos la selección en el formato Estándar
oSel.NumberFormat = 0
End Sub
El numero de clave no es secuencial, por lo que tenemos que saber de antemano la clave del formato que nos interesa, para ello, usa la macro que te muestro en: [#11.7.Listar formatos en un archivo de Calc|outline Listar formatos en un archivo de Calc].
Ahora veamos como combinar y separar celdas. Para ello, usamos el método merge, con el argumento verdadero (true), como en el siguiente ejemplo.
Sub FormatoCeldas18()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Combinamos las celdas seleccionadas
oSel.merge( True )
End Sub
Este método solo esta presente en un rango de celdas, no en una colección de rangos así que validalo cuando lo uses. Si estableces el argumento en falso (false), separara las celdas de la selección. Este método es sencillo pero debes de tomar en cuenta algunas consideraciones. Si seleccionas un rango ya combinado, junto con un área que no, este método no hará nada, claro, por código estoy hablando, pero has la prueba en la interfaz del usuario, es decir, manualmente y observa que pasa, ahora, tratemos de emularlo con código.
Sub FormatoCeldas19()
Dim oSel As Object
oSel = ThisComponent.getCurrentSelection()
'Separamos las celdas seleccionadas
oSel.merge( False )
'Las combinamos
oSel.merge( True )
End Sub
Si se puede, ¿verdad?, primero las separamos y después las combinamos. La siguiente consideración que debes tomar en cuenta, es saber que pasa cuando las celdas se combinan, para ello, haremos unas pruebas ya no con la selección sino con rangos con nombre, la macro siguiente te alternara entre combinar y separar la el rango seleccionado, nota como consultamos la propiedad getIsMerged para saber si el rango esta combinado.
Sub FormatoCeldas20()
Dim oRango As Object
Dim oHojaActiva As Object
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oRango = oHojaActiva.getCellRangeByName( "B2:D10" )
'Invertimos la combinación
oRango.merge( Not oRango.getIsMerged )
End Sub
Ahora, en la siguiente macro, tienes que poner mucha atención, nota el rango que estamos combinando, las celdas en las cuales verificamos si están combinadas, el valor que nos devuelve el consultar su propiedad getIsMerged y observa hasta cuando nos funciona el método para separar las celdas.
Sub FormatoCeldas21()
Dim oRango As Object
Dim oHojaActiva As Object
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oRango = oHojaActiva.getCellRangeByName( "E15:H20" )
oRango.merge( True )
'Nota que la celda G19 forma parte del rango combinado
'consultamos la propiedad y tratamos de separar
Msgbox oHojaActiva.getCellRangeByName( "G19" ).getIsMerged()
oHojaActiva.getCellRangeByName( "G19" ).merge( False )
Msgbox oHojaActiva.getCellRangeByName( "F17" ).getIsMerged()
'Tratamos de separar las celdas
oHojaActiva.getCellRangeByName( "G19" ).merge( False )
Msgbox oHojaActiva.getCellRangeByName( "E16" ).getIsMerged()
oHojaActiva.getCellRangeByName( "G19" ).merge( False )
'Ahora si, nos dice que esta combinada y
'finalmente logramos separarlas
Msgbox oHojaActiva.getCellRangeByName( "E15" ).getIsMerged()
oHojaActiva.getCellRangeByName( "E15" ).merge( False )
End Sub
¿Lo notaste?, cuando se combinan celdas, todas, excepto la de la esquina superior izquierda del rango, se marcan como “no” combinadas, entonces, eso nos obliga a buscar y encontrar esta celda a partir de otra cuando intentemos separar celdas, para hacer esto, nos auxiliaremos de un cursor cuyo uso ya lo hemos visto.
Sub FormatoCeldas22()
Dim oRango As Object
Dim oHojaActiva As Object
Dim oCursor As Object
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oRango = oHojaActiva.getCellRangeByName( "E15:H20" )
oRango.merge( True )
'Verificamos que este combinada
MsgBox oHojaActiva.getCellRangeByName( "E15" ).getIsMerged()
'Creamos un cursor a partir de una celda que no sea la de
'la esquina superior izquierda
oCursor = oHojaActiva.createCursorByRange( oHojaActiva.getCellRangeByName( "G19" ) )
'Expandimos el cursor al área combinada
oCursor.collapseToMergedArea()
'Separamos las celdas
oCursor.merge( False )
End Sub
Esta vez, a partir de otra celda, expandimos el cursor a la región combinada y pudimos separar fácilmente. Toma en cuenta que pasa con las celdas que tienen contenido cuando se combinan, verificalo en la interfaz del usuario y trata de anticipar este caso.
Como ultimo tema de este capitulo, veamos como proteger y desproteger celdas, recuerda que esta protección solo es efectiva si la hoja de calculo esta protegida.
Sub ProtegerCeldas1()
Dim oRango As Object
Dim oHojaActiva As Object
Dim oPC As New "com.sun.star.util.CellProtection"
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oRango = oHojaActiva.getCellRangeByName( "J27:L30" )
With oPC
'Determina si la celda esta bloqueada para modificarse
.IsLocked = True
'Determina si se ocultan las formulas, solo veras el resultado
.IsFormulaHidden = True
'Determina si se oculta el contenido de las celdas
.IsHidden = True
'Para ocultar solo para la impresión
.IsPrintHidden = True
End With
oRango.CellProtection = oPC
oHojaActiva.Protect("")
End Sub
Para desproteger las celdas, es suficiente con desproteger la hoja, de todos modos puedes deshabilitar las opciones de protección con solo establecer las opciones de protección en falso (False), por supuesto, no siempre tienen que estar todas seleccionadas, tu determinaras el nivel de acceso en cada uno de tus proyecto, por ejemplo.
Sub ProtegerCeldas2()
Dim oRango As Object
Dim oHojaActiva As Object
Dim oPC As New "com.sun.star.util.CellProtection"
oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oRango = oHojaActiva.getCellRangeByName( "J27:L30" )
'Desprotegemos la hoja
oHojaActiva.unProtect("")
With oPC
'Determina si la celda esta bloqueada para modificarse
.IsLocked = True
'Determina si se ocultan las formulas, solo veras el resultado
.IsFormulaHidden = True
'Determina si se oculta el contenido de las celdas
.IsHidden = True
'Para ocultar solo para la impresión
.IsPrintHidden = True
End With
oRango.CellProtection = oPC
End Sub
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 {{#switch: macros |
indice = Índice del Foro Oficial en español de Apache OpenOffice | writer = Foro Oficial en español de Apache OpenOffice para Writer | calc = Foro Oficial en español de Apache OpenOffice para Calc | impress = Foro Oficial en español de Apache OpenOffice para Impress | draw = Foro Oficial en español de Apache OpenOffice para Draw | base = Foro Oficial en español de Apache OpenOffice para Base | math = Foro Oficial en español de Apache OpenOffice para Math | macros = Foro Oficial en español de Apache OpenOffice para Macros y API UNO | extensiones = Foro Oficial en español de Apache OpenOffice para Extensiones | comunidad = Foro Oficial en español de Apache OpenOffice para la Comunidad | macros
}} |