none
Como Puedo Generar Un Excel A Traves De Una Consulta SQL Sin Usar Un Datagridview RRS feed

  • Pregunta

  • Hola que tal, me preguntaba si puedo generar una hoja de excel con la informacion arrojada de una consulta SQL pero sin usar un datagridview?? 

    quisiera algo como esto:

    Ojala y me puedan ayudar, Gracias...


    Cristian Murillo

    miércoles, 14 de marzo de 2018 18:53

Respuestas

  • Hola, podrías utilizar Interop

    Reportes en Excel con VB.NET


    Votar es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 14 de marzo de 2018 21:13
  • Hola:
    Este ejemplo, hace uso de la libreria Spire.xls, por lo tanto tendras que añadir una referencia a dicha libreria
    En un Form con 1 Button, copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Imports Spire.Xls

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'DataTable -> Excel
            Dim lsPath As String = "c:\borrar\prueba.xlsx"
            Try
                Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                Dim ldtDataTable As New DataTable
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptador
                    Using daCustomers As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                        daCustomers.Fill(ldtDataTable)
                    End Using
                End Using
                Dim workbook As Workbook = New Workbook()
                'Inicializar hoja de cálculo
                Dim sheet As Worksheet = workbook.Worksheets(0)
                sheet.InsertDataTable(ldtDataTable, True, 2, 1, -1, -1)
                '
                workbook.SaveToFile(lsPath, ExcelVersion.Version2007)
                System.Diagnostics.Process.Start(lsPath)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    miércoles, 14 de marzo de 2018 21:54
  • Oye tranquilo jaja, mira todos los ejemplos que he buscado se hacian con un datagridview

    Disculpa, releyendo mi respuesta creo que tal vez haya sido un poco brusca. Básicamente el proceso es este:

    1) Leemos datos de SQL a un DataTable. Por ejemplo, usando un DataAdapter:

    Dim cn as New SqlConnection("tu cadena de conexión")
    Dim da as New SqlDataAdapter("Select * from laTabla", cn)
    Dim dt as New DataTable()
    da.Fill(dt)
    

    Ahora que los datos están en memoria los paras al Excel por cualquiera de los métodos disponibles, como por ejemplo usando una referencia COM, o usando OleDb, o usando OpenXml, o usando una librería de terceros. Por ejemplo, con la librería ClosedXml bastaría esto:

    Dim wb = new XLWorkbook()
    wb.Worksheets.Add(dt,"NombreDeLaHoja")
    wb.SaveAs(nombreDeFichero)

    jueves, 15 de marzo de 2018 20:36

Todas las respuestas

  • Errr... No entiendo lo del DataGrdView. ¿Por qué demonios piensas que el DataGridView tiene algo que ver en la exportación? Normalmente lo que haces es traer los datos de Sql a un DataTable, y luego exportar el DataTable a Excel. Aunque es frecuente además vincular un DataGridView al DataTable para que los datos se vean en pantalla, no interviene en absoluto en el proceso de exportación. Simplemente no vincules el DataGridView al DataTable, y deja todo lo demás igual (SQL --> DataTable --> Excel).
    miércoles, 14 de marzo de 2018 20:56
  • Hola, podrías utilizar Interop

    Reportes en Excel con VB.NET


    Votar es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 14 de marzo de 2018 21:13
  • Oye tranquilo jaja, mira todos los ejemplos que he buscado se hacian con un datagridview, por eso lo pense, si puedes ayudarme adelante

    Cristian Murillo

    miércoles, 14 de marzo de 2018 21:18
  • Hola:
    Este ejemplo, hace uso de la libreria Spire.xls, por lo tanto tendras que añadir una referencia a dicha libreria
    En un Form con 1 Button, copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Imports Spire.Xls

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'DataTable -> Excel
            Dim lsPath As String = "c:\borrar\prueba.xlsx"
            Try
                Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                Dim ldtDataTable As New DataTable
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptador
                    Using daCustomers As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                        daCustomers.Fill(ldtDataTable)
                    End Using
                End Using
                Dim workbook As Workbook = New Workbook()
                'Inicializar hoja de cálculo
                Dim sheet As Worksheet = workbook.Worksheets(0)
                sheet.InsertDataTable(ldtDataTable, True, 2, 1, -1, -1)
                '
                workbook.SaveToFile(lsPath, ExcelVersion.Version2007)
                System.Diagnostics.Process.Start(lsPath)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    miércoles, 14 de marzo de 2018 21:54
  • Oye tranquilo jaja, mira todos los ejemplos que he buscado se hacian con un datagridview

    Disculpa, releyendo mi respuesta creo que tal vez haya sido un poco brusca. Básicamente el proceso es este:

    1) Leemos datos de SQL a un DataTable. Por ejemplo, usando un DataAdapter:

    Dim cn as New SqlConnection("tu cadena de conexión")
    Dim da as New SqlDataAdapter("Select * from laTabla", cn)
    Dim dt as New DataTable()
    da.Fill(dt)
    

    Ahora que los datos están en memoria los paras al Excel por cualquiera de los métodos disponibles, como por ejemplo usando una referencia COM, o usando OleDb, o usando OpenXml, o usando una librería de terceros. Por ejemplo, con la librería ClosedXml bastaría esto:

    Dim wb = new XLWorkbook()
    wb.Worksheets.Add(dt,"NombreDeLaHoja")
    wb.SaveAs(nombreDeFichero)

    jueves, 15 de marzo de 2018 20:36