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

Discute sobre la aplicación de hojas de cálculo

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

Notapor rimaya » Jue Feb 25, 2010 1:38 pm

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
rimaya
 
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm

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

Notapor guillefaj » Jue Feb 25, 2010 6:41 pm

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

Notapor Notlim » Jue Feb 25, 2010 7:21 pm

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

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

Notapor mauricio » Jue Feb 25, 2010 7:26 pm

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

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

Notapor Notlim » Jue Feb 25, 2010 7:46 pm

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

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

Notapor mauricio » Jue Feb 25, 2010 8:04 pm

Hola...

Es muy sencillo:
Código: Seleccionar todo   Expandir vistaContraer vista
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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

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

Notapor rimaya » Jue Feb 25, 2010 8:56 pm

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) 917 veces
OpenOffice 3.2 en Debian Lenny
rimaya
 
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm

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

Notapor Notlim » Jue Feb 25, 2010 9:47 pm

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

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

Notapor mauricio » Vie Feb 26, 2010 7:27 pm

Hola...

Tiene años que no toco VBA, pero si no recuerdo mal y tienes esto:
Código: Seleccionar todo   Expandir vistaContraer vista
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
Avatar de Usuario
mauricio
 
Mensajes: 5991
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

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

Notapor mriosv » Sab Feb 27, 2010 12:12 am

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 5 (Win10x64)
mriosv
 
Mensajes: 2204
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

Notapor mauricio » Sab Feb 27, 2010 2:06 am

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

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

Notapor rimaya » Lun Mar 01, 2010 11:36 am

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   Expandir vistaContraer vista
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
rimaya
 
Mensajes: 3
Registrado: Jue Feb 25, 2010 1:28 pm


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: MSN [Bot] y 7 invitados