[RESUELTO] Copiar contenido celda según color de fondo ...
[RESUELTO] Copiar contenido celda según color de fondo ...
Saludos,
Mi consulta es la siguiente:
Necesito generar una hoja de informe a partir de otras que contienen información clasificada por el color de fondo de la celda.
Por lo que necesito chequear el formato y clasificarla a modo de resumen.
Empecé a programar algo con macros pero creo que puede hacerse de forma más sencilla.
Muchas gracias por la ayuda.
Saludos
f.
Mi consulta es la siguiente:
Necesito generar una hoja de informe a partir de otras que contienen información clasificada por el color de fondo de la celda.
Por lo que necesito chequear el formato y clasificarla a modo de resumen.
Empecé a programar algo con macros pero creo que puede hacerse de forma más sencilla.
Muchas gracias por la ayuda.
Saludos
f.
Última edición por rimaya el Lun Mar 01, 2010 11:37 am, editado 1 vez en total.
OpenOffice 3.2 en Debian Lenny
Re: Copiar contenido celda según color de fondo de la celda
El color de fondo vendrá determinado por algún criterio, si es así, con el uso de condicionales al estilo de =SI("se cumple tal criterio";"poner dato";"en blanco"). ¿Podrías poner un ejemplo?
OpenOffice 3.3 Ubuntu 10.04 y libreoffice 3.3 Windows xp
Re: Copiar contenido celda según color de fondo de la celda
Hola rimaya:
Tengo la misma necesidad de hallar el color de una celda (en mi caso si es verde o no) y efectuar un condicional, pero no he conseguido hacer la funcion que necesito, a mi parecer lo que tu podrias hacer es asignar "al lado" de cada celda que necesites un numero y desde tu informe leer los numeros, discriminar y coger los valores que estan "al lado"
Si acaso encontraras como hallar el color de una celda por favor publicalo.
Tengo la misma necesidad de hallar el color de una celda (en mi caso si es verde o no) y efectuar un condicional, pero no he conseguido hacer la funcion que necesito, a mi parecer lo que tu podrias hacer es asignar "al lado" de cada celda que necesites un numero y desde tu informe leer los numeros, discriminar y coger los valores que estan "al lado"
Si acaso encontraras como hallar el color de una celda por favor publicalo.
OpenOffice.org 3.2.0 en Windows XP y en OpenSuse11.2
Re: Copiar contenido celda según color de fondo de la celda
Hola...
Definitivamente yo lo haría con macros, si puedes subir un ejemplo de tu archivo como esta y como lo quieres, puedo apoyarte con ello...
Saludos
Definitivamente yo lo haría con macros, si puedes subir un ejemplo de tu archivo como esta y como lo quieres, puedo apoyarte con ello...
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar contenido celda según color de fondo de la celda
Hola Mauriciomauricio escribió:Hola...
Definitivamente yo lo haría con macros, si puedes subir un ejemplo de tu archivo como esta y como lo quieres, puedo apoyarte con ello...
Saludos
A diferencia de rimaya yo solo necesito "saber" si una celda tiene o no color de fondo, espero tengas tiempo.
saludos
OpenOffice.org 3.2.0 en Windows XP y en OpenSuse11.2
Re: Copiar contenido celda según color de fondo de la celda
Hola...
Es muy sencillo:
Aquí lo importante es saber en que "contexto" lo usaras...
Saludos
Es muy sencillo:
Código: Seleccionar todo
Sub CeldaColor()
Dim oSel As Object
Dim oCelda As Object
'La seleccion actual
oSel = ThisComponent.getCurrentSelection()
'Seleccionamos solo una celda, en caso de rangos solo seleccionamos
'la celda superior izquierda
Select Case oSel.getImplementationName()
Case "ScCellObj" : oCelda = oSel
Case "ScCellRangeObj" : oCelda = oSel.getCellByPosition(0,0)
Case "ScCellRangesObj" : oCelda = oSel.getByIndex(0).getCellByPosition(0,0)
Case Else : MsgBox "No se ni que seleccionaste"
End Select
Select Case oCelda.CellBackColor
Case -1
MsgBox "La celda no tiene color de fondo"
Case Else
MsgBox "La celda tiene el color número = " & oCelda.CellBackColor
End Select
End Sub
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar contenido celda según color de fondo de la celda
Antes de nada muchas gracias por vuestros comentarios.
Añado el fichero con el que estoy trabajando a modo de ejemplo.
He decidido seguir con la macro (se llama vacas) y por el momento selecciona los campos que me interesan de todas las hojas del libro.
Falta por aprender a:
- chequear la propiedad del color de fondo para según el color reportarlo en la columna que toca dentro de la hoja report.
Bueno, seguiremos estudiando macros y programación.
Gracias,
F.
Añado el fichero con el que estoy trabajando a modo de ejemplo.
He decidido seguir con la macro (se llama vacas) y por el momento selecciona los campos que me interesan de todas las hojas del libro.
Falta por aprender a:
- chequear la propiedad del color de fondo para según el color reportarlo en la columna que toca dentro de la hoja report.
Bueno, seguiremos estudiando macros y programación.
Gracias,
F.
- Adjuntos
-
- Report-2009.ods
- (18.64 KiB) Descargado 1051 veces
OpenOffice 3.2 en Debian Lenny
Re: Copiar contenido celda según color de fondo de la celda
Gracias Mauricio
El caso es que tenia yo en excel esta formula:
=SI((QueColor(D2)=FALSO());B1;(CELDA("contenido";D2)))
Donde la macros "QueColor()" dice:
Sub QueColor()
Public Function QueColor(ByVal Lacelda As Range)
Application.Volatile
If Lacelda.Interior.ColorIndex < 0 Then
QueColor = 0
Else
QueColor = Lacelda.Interior.ColorIndex
End If
End Function
End Sub
lo que me arroja el valor del color de la celda señalada por la macros, y como veran, si tengo color hago una cosa y si no hago otra, he querido hacer exactamente lo mismo en calc, pero no conozco bien las instrucciones
Gracias
El caso es que tenia yo en excel esta formula:
=SI((QueColor(D2)=FALSO());B1;(CELDA("contenido";D2)))
Donde la macros "QueColor()" dice:
Sub QueColor()
Public Function QueColor(ByVal Lacelda As Range)
Application.Volatile
If Lacelda.Interior.ColorIndex < 0 Then
QueColor = 0
Else
QueColor = Lacelda.Interior.ColorIndex
End If
End Function
End Sub
lo que me arroja el valor del color de la celda señalada por la macros, y como veran, si tengo color hago una cosa y si no hago otra, he querido hacer exactamente lo mismo en calc, pero no conozco bien las instrucciones
Gracias
OpenOffice.org 3.2.0 en Windows XP y en OpenSuse11.2
Re: Copiar contenido celda según color de fondo de la celda
Hola...
Tiene años que no toco VBA, pero si no recuerdo mal y tienes esto:
Tendría que darte un error, no puedes tener una función dentro de una macro. También, si mal no recuerdo, cuando haces referencia a una celda en una función en VBA, realmente hacer referencia al "objeto", por lo que puedes consultar sus método y propiedades, en OOo Basic, cuando haces referencia a una celda en una función, estas haciendo referencia "solo" al valor de la celda, no al objeto. He intentado acceder a las celdas como objetos para consultar, por ejemplo, su color, y funciona, pero solo cuando lo ejecutamos abierto, si cierro y abro me da un error porque aun no tiene las referencias en memoria.
En resumen, veo complicado, por ahora, hacerlo como función, como macro, ya te pase la forma...
Saludos
P.D. Compañer@ rimaya, vi tu archivo pero no tengo claro los "movimientos" que quieres hacer, en estos casos, es mucho más fácil que te tomes unos minutos para detallar lo más posible lo que quieres, es más rápido a que intente adivinar que hay que hacer, por favor, no des por hecho nada, en programación uno tiene que ser muy, muy explicito, gracias.
Tiene años que no toco VBA, pero si no recuerdo mal y tienes esto:
Código: Seleccionar todo
Sub QueColor()
Public Function QueColor(ByVal Lacelda As Range)
En resumen, veo complicado, por ahora, hacerlo como función, como macro, ya te pase la forma...
Saludos
P.D. Compañer@ rimaya, vi tu archivo pero no tengo claro los "movimientos" que quieres hacer, en estos casos, es mucho más fácil que te tomes unos minutos para detallar lo más posible lo que quieres, es más rápido a que intente adivinar que hay que hacer, por favor, no des por hecho nada, en programación uno tiene que ser muy, muy explicito, gracias.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Copiar contenido celda según color de fondo de la celda
Adjunto el siguiente enlace del foro en inglés, realizado por Villeroy moderador de dicho foro, en el que está el código para definir distintas funciones que devuelven valores del estado de una celda entre ellos el color de fondo.
http://user.services.openoffice.org/en/ ... =21&t=2762
http://user.services.openoffice.org/en/ ... =21&t=2762
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
Apache OpenOffice 4, LibreOffice (Win10x64)
Re: Copiar contenido celda según color de fondo de la celda
Hola Miguel:
Gracias por el vinculo, me ha dado nuevas ideas, pero la cuestión general sigue sin resolverse, hay que forzar la actualización (CTRL+SHIFT+F9) cuando se quiera saber el cambio de color, las funciones creo yo, deben actualizarse de forma automática, pero tal vez al compañero le sirva así...
Saludos
Gracias por el vinculo, me ha dado nuevas ideas, pero la cuestión general sigue sin resolverse, hay que forzar la actualización (CTRL+SHIFT+F9) cuando se quiera saber el cambio de color, las funciones creo yo, deben actualizarse de forma automática, pero tal vez al compañero le sirva así...
Código: Seleccionar todo
Function ColorCelda( Hoja As Integer, Celda As String ) As Long
Dim oCelda As Object
If Hoja >= ThisComponent.getSheets.getCount Then Hoja = 0
oCelda = ThisComponent.getSheets.getByIndex( Hoja ).getCellRangeByName( Celda )
ColorCelda = oCelda.CellBackColor
End Function
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
[RESUELTO]: Copiar contenido celda según color de fondo ...
Muchas gracias Mauricio y a todos por vuestras respuestas.
El código que copiaste me resultó muy útil.
Os copio las líneas por si son de utilidad.
Gracias,
Un saludo,
F.
El código que copiaste me resultó muy útil.
Os copio las líneas por si son de utilidad.
Gracias,
Un saludo,
F.
Código: Seleccionar todo
Option Explicit
Sub vacas
Dim oDoc As Object
Dim oHojas As Object
Dim mNombresHojas() As String
Dim oHojaActiva As Object
Dim oCelda As Object
Dim co1 As Integer
Dim cel1 As Integer
oDoc = ThisComponent
oHojas = oDoc.getSheets()
'Obtenemos una matriz con los nombres de todas las hojas
mNombresHojas() = oHojas.getElementNames()
'-1 para evitar analizar la hoja final de resultados
'Recorremos todas las hojas del libro menos la final.
For co1 = LBound( mNombresHojas() ) To UBound( mNombresHojas() )-1
oHojaActiva = oHojas.getByName( mNombresHojas(co1) )
'Seleccionar la celda B8 y bucle hasta B30
For cel1 = 7 To 29
'Referencia a celda por posicion
oCelda = oHojaActiva.getCellByPosition( 1,cel1 )
'TODO: AQUI con IFs según el color copiaremos o no haremos nada en hoja Report
Select Case oCelda.CellBackColor
Case -1
MsgBox "La celda no tiene color de fondo"
Case Else
MsgBox "La celda tiene el color número = " & oCelda.CellBackColor
End Select
Next
Next
End Sub
OpenOffice 3.2 en Debian Lenny