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

Volver a la búsqueda anterior