Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [vb.net2008]

    Ciao a tutti!

    volevo una info, premetto che sono nuovo in questo mondo della programmazione... e ho vluto iniziare con vb. ho fatto una forma che mi prende i dati da un db access e mi popola un datagrid, ora vorrei esportare il tutto in excel, ho trovato il codice, l'ho implementato e funziona ma non mi esporta il nome delle colonne... questo il codice che uso, qualcuno di voi riesce ad aiutarmi? uso vb.net 2008 e excel2003, grazie a tutti.

    codice:
        Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click
            Dim programma As Excel.Application
            Dim cartella As Excel.Workbook
            Dim foglio As Excel.Worksheet
            programma = CreateObject("Excel.Application")
            programma.Visible = True
            cartella = programma.Workbooks.Add
            foglio = cartella.ActiveSheet
    
            Dim a As Integer
            Dim b As Integer
            Dim testo As String
    
            For a = 0 To DataGridView1.RowCount - 1
                testo = ""
                For b = 0 To DataGridView1.ColumnCount - 1
                    foglio.Cells(a + 1, b + 1) = DataGridView1.Rows(a).Cells(b).Value
                Next
            Next
    
        End Sub

  2. #2
    qualcosa di questo tipo...
    codice:
     
            For i As Integer = 0 To DataGridView1.ColumnCount - 1
                '  foglio.Columns(i) = DataGridView1.Columns.Item(i).HeaderText
                foglio.Columns(i).Name = DataGridView1.Columns.Item(i).HeaderText
            Next
    HeaderText? qualcosa con Column name?
    dai che dite? qualcuno puo aiutarmi?

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Questo ciclo ti elenca i campi in un messagebox:

    codice:
            Dim s As String = ""
            For Each c As DataGridViewColumn In dgw.Columns
                s = s + c.HeaderText & Environment.NewLine
            Next
            MessageBox.Show(s)
    Ovviamente, prima devi fare un ciclo per inserire i nomi delle colonne nella PRIMA riga del foglio,
    poi fai il ciclo (che hai già) per inserire i dati a partire dalla SECONDA riga.


  4. #4
    Grazie mille!

    posto tutto il codice, e spiego che facendo cosi uno può personalizzare la query di partenza e selezionare i campi da visualizzare cosi quando clicca sul pulsante "export Excel" gli viene creato un foglio uguale, cosi non devo andare a scrivere a manina il campo 1 = datainizio il campo 2 = datafine.. ecc ecc ecc
    nella riga 1 metto il nome e cognome, nella riga 2 un testo e nella riga 4 i nomi dei campip, poi il ciclo che inizia a scrivere dalla riga 5 in poi.

    Grazie ancora gibra, non era difficile ma mi ero bloccato essendo la prima volta che lo facevo!
    sciauzz

    codice:
            Dim programma As Excel.Application
            Dim cartella As Excel.Workbook
            Dim foglio As Excel.Worksheet
            Dim objRange As Excel.Range
            programma = CreateObject("Excel.Application")
            programma.Visible = True
            cartella = programma.Workbooks.Add
            foglio = cartella.ActiveSheet
    
            Dim a As Integer
            Dim b As Integer = 0
    
            objRange = foglio.Range("a1")
            objRange.Value = ("Utente: ")
    
            objRange = foglio.Range("b1:d1")
            foglio.Range("b1:d1").MergeCells = True
            foglio.Range("b1").Font.Bold = True
            foglio.Range("b1").Font.Size = 20
            foglio.Range("b1").EntireColumn.AutoFit()
            objRange.Value = txtCognome.Text + " " + txtNome.Text
    
            objRange = foglio.Range("a2:d2")
            foglio.Range("a2:d2").MergeCells = True
            foglio.Range("a2").Font.Underline = True
            foglio.Range("a2").Font.Size = 12
            objRange.Value = ("Elenco Buoni erogati")
    
            For Each c As DataGridViewColumn In DataGridView1.Columns
                b = b + 1
    
                foglio.Cells(4, b) = c.HeaderText
                foglio.Cells(4, b).borders.weight = 2
                foglio.Cells(4, b).EntireColumn.AutoFit()
                foglio.Cells(4, b).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
            Next
    
            For a = 0 To DataGridView1.RowCount - 1
                For b = 0 To DataGridView1.ColumnCount - 1
                    foglio.Cells(a + 5, b + 1) = DataGridView1.Rows(a).Cells(b).Value
                    foglio.Cells(a + 5, b + 1).borders.weight = 2
                    foglio.Cells(a + 5, b + 1).EntireColumn.AutoFit()
                Next
            Next

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Però stai commettendo un gravissimo errore!

    Mescoli Early-binding :
    Dim programma As Excel.Application

    con il Late-binding :
    programma = CreateObject("Excel.Application")

    Se distribuisci il tuo programma , il tuo codice NON funzionerà su tutti i computer, ma solo su quelli che hanno la tua stessa versione di Excel.

    Inoltre potrebbe accadere (e di solito accade) che il server di Excel resta 'appeso' in memoria.

    Ti consiglio vivamente di leggere questo articolo al riguardo:
    Early-Late Binding in VB.NET e Excel
    http://nuke.vbcorner.net/Progetti/NE...T/Default.aspx


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.