none
CREAR TABLA DINAMICA DESDE VB.NET RRS feed

  • Pregunta

  • HOLA

    COMENTAR QUE ESTOY UTILIZANDO VB.NET Y NECESITO CREAR UNA TABLA DINAMICA PARA EXCEL DESDE CODIGO Y MI PREGUNTA ES COMO INDICARLE A LA TABLA DINAMICA EL FUENTE DE DATOS DEL DATASET DE ADO.NET .....VALE MENCIONAR QUE CON LA VERSION ADO DE VB.6 UTILIZABA EL RECORDSET Y AHORA NO ME FUNCIONA ESE METODO..

    GRACIAS

    martes, 14 de noviembre de 2017 22:04

Respuestas

  • Hola:
    En este ejemplo se hace uso de la libreria Spire.Xls por lo tanto, tendras que añadir una referencia a dicha libreria
    En un Form, copia y pega el siguiente codigo.

    Imports Spire.Xls

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            lP_1()
        End Sub
        Private Sub lP_1()
            Dim ldtDataTable As DataTable = GetOrdersTable()
            Dim workbook As Workbook = New Workbook()
            'Initailize worksheet
            Dim sheet As Worksheet = workbook.Worksheets("Sheet1")
            sheet.InsertDataTable(ldtDataTable, True, 1, 1, -1, -1)
            sheet.Name = "Data Source"
            Dim sheet2 As Worksheet = workbook.Worksheets("Sheet2")
            sheet2.Name = "Pivot Table "
            'Create Pivot Table
            Dim dataRange As CellRange = sheet.Range()
            Dim cache As PivotCache = workbook.PivotCaches.Add(dataRange)
            Dim pt As PivotTable = sheet2.PivotTables.Add("Pivot Table", sheet.Range("A1"), cache)
            '
            Dim r1 = pt.PivotFields("product")
            r1.Axis = AxisTypes.Row
            pt.Options.RowHeaderCaption = "CABECERA PIVOT"
            Dim r2 = pt.PivotFields("country")
            r2.Axis = AxisTypes.Row
            '
            pt.DataFields.Add(pt.PivotFields("quantity"), "SUM of quantity", SubtotalTypes.Sum)
            pt.DataFields.Add(pt.PivotFields("total"), "SUM of total", SubtotalTypes.Sum)
            pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12
            'Save and Launch
            workbook.SaveToFile("PATH_DEL_FICHERO_EXCEL", ExcelVersion.Version2007)
            System.Diagnostics.Process.Start("PATH_DEL_FICHERO_EXCEL")
        End Sub

        Private Function GetOrdersTable() As DataTable
            ' sample "orders" table that contains 1,000 rows
            Dim ldtDataTable = New DataTable("orders")
            ldtDataTable.Columns.Add("product", GetType(String))
            ldtDataTable.Columns.Add("country", GetType(String))
            ldtDataTable.Columns.Add("quantity", GetType(Integer))
            ldtDataTable.Columns.Add("total", GetType(Decimal))
            ldtDataTable.Columns.Add("year", GetType(Integer))
            ldtDataTable.Columns.Add("month", GetType(Integer))
            ldtDataTable.Columns.Add("day", GetType(Integer))
            '
            Dim countries = New String() {"USA", "United Kingdom", "Germany", "Italy", "France", "Canada", "Spain"}
            Dim products = New String() {"Product #1", "Product #2", "Product #3"}
            Dim productPrices = New Decimal() {21, 33, 78}
            '
            Dim q As Integer
            Dim productIdx As Integer
            For i As Integer = 1 To 1000
                q = 1 + (i Mod 6)
                productIdx = (i + i Mod 10) Mod products.Length
                ldtDataTable.Rows.Add(New Object() {products(productIdx), countries(i Mod countries.Length), q, q * productPrices(productIdx), 2010 + (i Mod 6), 1 + (i Mod 12), i Mod 29})
            Next
            Return ldtDataTable
        End Function
    End Class

    P.D.

    El resultado es:

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos
    miércoles, 15 de noviembre de 2017 12:19

Todas las respuestas

  • Hola  Ernesto MF

    Con base a tu consulta, en VB.NET para crear tablas dinámicas es muy importante que entiendas que ya es totalmente diferente a VB 6.0, para que puedas crearla lo que te aconsejo son dos cosas:

    1. Intenta crear la tabla, utilizando un form y agregando un DataGridView, en ellla, puedes llamar a tu base de datos  ya sea creando una clase  de conexión de datos o un enlace de datos.

    2. Para que se te pueda dar el apoyo necesario es importante que pongas el código de como lo estás realizando tanto el diseño del form como el código, de esta manera para los colaboradores y para ti, les serán más sencillo poder apoyarte.

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludo Cordiales.

    Gracias por usar los foros de MSDN.

    Juan
    _____
     
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
     
    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
     
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 14 de noviembre de 2017 23:14
    Moderador
  • Hola:
    En este ejemplo se hace uso de la libreria Spire.Xls por lo tanto, tendras que añadir una referencia a dicha libreria
    En un Form, copia y pega el siguiente codigo.

    Imports Spire.Xls

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            lP_1()
        End Sub
        Private Sub lP_1()
            Dim ldtDataTable As DataTable = GetOrdersTable()
            Dim workbook As Workbook = New Workbook()
            'Initailize worksheet
            Dim sheet As Worksheet = workbook.Worksheets("Sheet1")
            sheet.InsertDataTable(ldtDataTable, True, 1, 1, -1, -1)
            sheet.Name = "Data Source"
            Dim sheet2 As Worksheet = workbook.Worksheets("Sheet2")
            sheet2.Name = "Pivot Table "
            'Create Pivot Table
            Dim dataRange As CellRange = sheet.Range()
            Dim cache As PivotCache = workbook.PivotCaches.Add(dataRange)
            Dim pt As PivotTable = sheet2.PivotTables.Add("Pivot Table", sheet.Range("A1"), cache)
            '
            Dim r1 = pt.PivotFields("product")
            r1.Axis = AxisTypes.Row
            pt.Options.RowHeaderCaption = "CABECERA PIVOT"
            Dim r2 = pt.PivotFields("country")
            r2.Axis = AxisTypes.Row
            '
            pt.DataFields.Add(pt.PivotFields("quantity"), "SUM of quantity", SubtotalTypes.Sum)
            pt.DataFields.Add(pt.PivotFields("total"), "SUM of total", SubtotalTypes.Sum)
            pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12
            'Save and Launch
            workbook.SaveToFile("PATH_DEL_FICHERO_EXCEL", ExcelVersion.Version2007)
            System.Diagnostics.Process.Start("PATH_DEL_FICHERO_EXCEL")
        End Sub

        Private Function GetOrdersTable() As DataTable
            ' sample "orders" table that contains 1,000 rows
            Dim ldtDataTable = New DataTable("orders")
            ldtDataTable.Columns.Add("product", GetType(String))
            ldtDataTable.Columns.Add("country", GetType(String))
            ldtDataTable.Columns.Add("quantity", GetType(Integer))
            ldtDataTable.Columns.Add("total", GetType(Decimal))
            ldtDataTable.Columns.Add("year", GetType(Integer))
            ldtDataTable.Columns.Add("month", GetType(Integer))
            ldtDataTable.Columns.Add("day", GetType(Integer))
            '
            Dim countries = New String() {"USA", "United Kingdom", "Germany", "Italy", "France", "Canada", "Spain"}
            Dim products = New String() {"Product #1", "Product #2", "Product #3"}
            Dim productPrices = New Decimal() {21, 33, 78}
            '
            Dim q As Integer
            Dim productIdx As Integer
            For i As Integer = 1 To 1000
                q = 1 + (i Mod 6)
                productIdx = (i + i Mod 10) Mod products.Length
                ldtDataTable.Rows.Add(New Object() {products(productIdx), countries(i Mod countries.Length), q, q * productPrices(productIdx), 2010 + (i Mod 6), 1 + (i Mod 12), i Mod 29})
            Next
            Return ldtDataTable
        End Function
    End Class

    P.D.

    El resultado es:

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos
    miércoles, 15 de noviembre de 2017 12:19