[RESUELTO] Copiar contenido celda según color de fondo ...

Discute sobre la aplicación de hojas de cálculo
Responder
rimaya
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm

[RESUELTO] Copiar contenido celda según color de fondo ...

Mensaje por rimaya »

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.
Última edición por rimaya el Lun Mar 01, 2010 11:37 am, editado 1 vez en total.
OpenOffice 3.2 en Debian Lenny
Avatar de Usuario
guillefaj
Mensajes: 21
Registrado: Lun Dic 14, 2009 1:24 pm

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por guillefaj »

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
Notlim
Mensajes: 3
Registrado: Jue Feb 25, 2010 7:12 pm

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por Notlim »

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.
OpenOffice.org 3.2.0 en Windows XP y en OpenSuse11.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por mauricio »

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Notlim
Mensajes: 3
Registrado: Jue Feb 25, 2010 7:12 pm

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por Notlim »

mauricio 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
Hola Mauricio

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por mauricio »

Hola...

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
Aquí lo importante es saber en que "contexto" lo usaras...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
rimaya
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por rimaya »

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.
Adjuntos
Report-2009.ods
(18.64 KiB) Descargado 1051 veces
OpenOffice 3.2 en Debian Lenny
Notlim
Mensajes: 3
Registrado: Jue Feb 25, 2010 7:12 pm

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por Notlim »

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
OpenOffice.org 3.2.0 en Windows XP y en OpenSuse11.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por mauricio »

Hola...

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)
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.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
mriosv
Mensajes: 2335
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por mriosv »

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
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiar contenido celda según color de fondo de la celda

Mensaje por mauricio »

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í...

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
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
rimaya
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm

[RESUELTO]: Copiar contenido celda según color de fondo ...

Mensaje por rimaya »

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.

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
Responder