Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181

    [VB.NET] Esportare un datagridview in Excel in modo veloce

    Ciao a tutti,

    è un po' di tempo che giro intorno a questo problema e non so veramente se esiste ciò che cerco, quindi vi chiedo di comprendermi se la richeista non è formulata in modo corretto.

    Ho un'applicazione scritta in VB.NET. Tale applicazione ricava i dati da un database SQL Server 2008. Tali dati poi li memorizzo in un dataset e successivamente li visualizzo in un datagridview.

    A questo punto l'utente ha la possibilità di esportare i dati visualizzati nel datagridview in un foglio Excel opportunamente formattato.

    Fin qui tutto bene.

    Il problema sorge nel momento in cui i dati estratti sono tanti, nell'ordine del migliaio, in tal caso l'esportazione in Excel è davvero lento forse nemmeno due ore bastano.

    Quindi la mia domanda è esiste un metodo o una modalità in modo tale da velocizzare l'esportazione di un datagridview in Excel.

    Posto il codice che utilizzo per l'esportazione:

    E' da tener presente che la scrittura dei dati sul foglio Excel comincia dalla seconda riga in poi in quanto la prima l'ho dedicata alle intestazioni

    codice:
            
    
           For i = 0 To Me.DataView.RowCount - 1
                For j = 0 To Me.DataView.ColumnCount - 1
                    If ((i Mod 2) = 0) Then
                        worksheet.Cells(i + 2, j + 1) = Me.DataView(j, i).Value
                        worksheet.Cells(i + 2, j + 1).borders.weight = 2
                        worksheet.Cells(i + 2, j + 1).horizontalalignment = Excel.XlHAlign.xlHAlignCenter
                        worksheet.Cells(i + 2, j + 1).verticalalignment = Excel.XlVAlign.xlVAlignCenter
                        worksheet.Rows.AutoFit()
                    Else
                        worksheet.Cells(i + 2, j + 1) = Me.DataView(j, i).Value
                        worksheet.Cells(i + 2, j + 1).borders.weight = 2
                        worksheet.Cells(i + 2, j + 1).interior.color = RGB(233, 233, 233)
                        worksheet.Cells(i + 2, j + 1).horizontalalignment = Excel.XlHAlign.xlHAlignCenter
                        worksheet.Cells(i + 2, j + 1).verticalalignment = Excel.XlVAlign.xlVAlignCenter
                        worksheet.Rows.AutoFit()
                    End If
                Next
            Next
    Grazie mille in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    30
    Ciao,
    io esporterei tutti i dati e solo in un secondo momento farei la formattazione delle celle, forse velocizzi il tutto dando i range di formattazione che si eseguono tutti insieme in una botta sola.

    Fammi sapere se cosi' si velocizza.

    Andrea

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Ciao Andrea,

    Ci provo subito e ti darò la risposta

    Per il momento grazie mille

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    181
    Ciao Andrea,

    ho provato a seguire il tuo suggerimento andando ad esportare solo i dati dal datagridview al foglio Excel ed effettivamente è molto più veloce dell'ordine di 5 6 volte più veloce, infatti, con 40 record esportando solo dati impiega meno di 1 minuto, scrivendo prima i dati e poi formattandoli impiega circa 1 minuto e mezzo 2 minuti, scrivendo i dati come facevo prima cioè tutto insieme il mio algoritmo impiegava 7 minuti).

    Quindi, la valutazione da fare a questo punto è solo sulla formattazione, ma questo sarà oggetto di discussione con chi mi ha richiesto questa applicazione se è veramente necessaria, in tal caso seguirò il tuo consiglio cioè formattare i dati solo dopo averli inseriti tutti.

    Grazie mille Andrea mi sei stato di grande aiuto

    gc

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Probabilmente il tuo codice funzionerebbe ugualmente veloce se tu impostassi le opportune proprietà che influsicono sull'aggiornamento grafico del foglio. Ad esempio:

    codice:
        objExcel.Application.Interactive = False
        objExcel.Application.ScreenUpdating = False
        objExcel.Application.DisplayAlerts = False
        objExcel.Calculation = xlCalculationManual
        objExcel.CalculateBeforeSave = True

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    objExcel.Application.Interactive = False
    Questa cosa vuol dire, o megloio cosa fa ?

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da cassano
    Questa cosa vuol dire, o megloio cosa fa ?
    Guarda la guida a VBA di Excel (NON la guida di Excel).

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 © 2025 vBulletin Solutions, Inc. All rights reserved.