SUSCRÍBASE A NUESTRO BLOG
SOBRE APESOFT

ApeSoft es una compañía de soluciones de Gestión del Rendimiento Empresario: Gamification, Reporting, Dashboards, Planificación Presupuestaria y Balanced Scorecard, fundada en 1994, con sede central en España y oficinas en Estados Unidos.

Más información: Web ApeSoft

« Optimizar el tiempo de carga de datos origen en procesos de DataCycle Reporting | Main | No imprimir filas de una hoja Excel con información confidencial o no relevante »
viernes
jun202008

Ordenar una hoja de Excel por el color de las celdas desde DataCycle

Las infinitas posibilidades que nos ofrece la potente tarea de Ejecución de scripts definida dentro de un proceso de DataCycle Reporting nos permite realizar acciones como esta, ordenar una hoja en función del color de las celdas.

Este ejemplo que hemos diseñado nos permite ordenar una lista de nombres de informes donde cada uno tiene asignado un color en función del estado: Revisar, Pendiente, Aprobado, No aprobado,...

A continuación se muestra el ejemplo programado en Visual Basic Script que utiliza un informe ubicado en el directorio C:\Scripts\test.xls. La hoja de Excel que contiene la lista de informes es Hoja1

Sub OrdenarCeldasPorColor
    Const xlAscending = 1
         Const xlYes = 1

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False

    Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")
    Set objWorksheet = objWorkbook.Worksheets("Hoja1")
    i = 2

    Do Until objExcel.Cells(i, 1) = ""
        intColor = objExcel.Cells(i,2).Interior.ColorIndex
        Select Case intColor
            Case 3 intSortOrder = 4
            Case 4 intSortOrder = 1
            Case 6 intSortOrder = 2
            Case 41 intSortOrder = 3
        End Select
        objExcel.Cells(i, 3) = intSortOrder
        i = i + 1
    Loop

    Set objRange = objWorksheet.UsedRange
    Set objRange2 = objExcel.Range("C2")
    objRange.Sort objRange2, xlAscending, , , , , , xlYes

    Set objRange = objRange2.EntireColumn
    objRange.Clear
    Set objRange = Nothing
    Set objRange2 = Nothing
    objWorkbook.save
    objWorkbook.close False
    Set objWorksheet =  Nothing
    Set objWorkbook =  Nothing

End Sub

 

Antes de la ejecución del script nuestra hoja excel contenía:

antes.JPG 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Después de la ejecución:

despues.JPG 

PrintView Printer Friendly Version

EmailEmail Article to Friend