Sistema de Gestión de Negocios "Hexa"
Base de datos de conocimiento.
| Doc. Ref. 31978 Título: Ejemplo de generación de una hoja Excel usando un objeto RS Autor: Hexa Última actualización: 04/08/2026#excel #hoja #RS #exportar #tabla |
Ejemplo de generación de una hoja Excel usando un objeto RS
Es muy habitual querer realizar un análisis de datos que resulta en una tabla que queremos guardar en formato Excel.
El objeto RS permite cargar datos a partir de una consulta SQL o bien poblarlo manualmente a partir del resultado de un cálculo. Y tiene un métiodo que permite guardar su contenido en formato de hoja Excel.
En este documento se presenta dos ejemplos muy básicos: uno para crear directamemte una hoja Excel como resultado de una consulta y otro para hacer un cálculo, almacenarlo en un objeto RS y guardarlo, también, en una hoja Excel.
Exportación directa de consulta SQL a Excel
Sub Main (Criterio, Orden, Opciones) 'La consulta cuyo resultado queremos exportar a Excel BD.Rs.Consulta = "SELECT Cliente, SUM(Total) AS Facturacion FROM Factura WHERE YEAR(Fecha)=2026 GROUP BY Cliente HAVING SUM(Total) > 5000 ORDER BY SUM(Total) DESC" 'Cargar los datos de la base de datos principal BD.Rs.Abrir (false) 'Exportar el resultado a Excel en la rita especificada BD.Rs.CreaExcel "C:\temp\resultado.xlsx" 'Cerrar el objeto RS BD.Rs.Cerrar End Sub
Creación y población de un RS manual a partir de una consulta y un procesado simple de datos
Sub Main (Criterio, Orden, Opciones)
'La consulta cuyos datos queremos procesar para generar otra tabla
BD.Rs.Consulta = "SELECT Cliente, SUM(Total) AS Facturacion FROM Factura WHERE YEAR(Fecha)=2026 GROUP BY Cliente HAVING SUM(Total) > 5000 ORDER BY SUM(Total) DESC"
BD.Rs.Abrir (false)
'El objeto RS (2) que vamos a crear y poblar manualmente
BD.Rs2.Reiniciar
'Creación de columnas
BD.Rs2.NuevaColumna "Nombre", "Texto"
BD.Rs2.NuevaColumna "Clasificacion", "Texto"
BD.Rs2.NuevaColumna "Proyectos abiertos", "Entero"
'Recorreremos el primer resordset para, a partir de sus datos, generar filas en el segundo
Do While Not BD.Rs.Fin
'Nueva fila en el destino
BD.Rs2.NuevaFila : BD.Rs2.Ultimo
'Cada dato según un cálculo
'Primero, el nombre del cliente
BD.Rs2.Campo ("Nombre") = BD.Cmp ("Cliente", "Nombre", "Codigo=" & BD.Rs.Campo ("Cliente"), false)
'Después un dato de clasificación que deducimos según un criterio inventado
If fpc.VAC (BD.Rs.Campo ("Facturacion")) > 10000 Then
BD.Rs2.Campo ("Clasificacion") = "Oro"
Else
BD.Rs2.Campo ("Clasificacion") = "Plata"
End If
'Finalmente un datos de proyecyos con una consulta a otra tabla usando el método "Cmp" del objeto "BD", que es muy práctico
BD.Rs2.Campo ("Proyectos abiertos") = BD.Cmp ("Proyecto", "COUNT(Codigo)", "Prioridad > 0 AND Cliente=" & BD.Rs.Campo ("Cliente"), false)
BD.Rs.Siguiente
Loop
'Los datos del objeto RS se pueden ordenar ppr una columna
BD.Rs2.Ordenar "Proyectos abiertos"
'Finalmemte, generamos la Excel...
BD.Rs2.CreaExcel "C:\temp\resultado.xlsx"
'... y cerramos los dos objetos RS
BD.Rs.Cerrar
BD.Rs2.Cerrar
End Sub
