Esportare dati CSV

di il
15 risposte

Esportare dati CSV

Salve a tutti, ho un piccolo programmino che gestisce il mio magazzino (senza nessuna pretesa ) io uso il codice che allego per esportare i dati presenti nel database access, li passo nel DatagriView e li esporto... unico problema, come posso esportare anche l'intestazione delle colonne?

O se avete una soluzione migliore, accetto consigli ovviamente.
 Dim salva As New System.IO.StreamWriter(My.Settings.percorso & "\DataBase.csv")
        Dim A As Integer
        Dim B As Integer
        Dim testo As String
        For A = 0 To DBDataGridView.Rows.Count - 1
            testo = ""
            For B = 0 To 8
                If B < 8 Then
                    testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
                Else
                    testo = testo & DBDataGridView.Rows(A).Cells(B).Value
                End If
            Next
            salva.WriteLine(testo)
        Next
        salva.Close()
        MsgBox("File Esportato con successo", MsgBoxStyle.Information)
faccio così per passare i dati a chi non usa il software ovviamente.... quando riuscirò a leggere e scrivere il db access online allora avrò risolto... un passo alla volta.... credo...

15 Risposte

  • Re: Esportare dati CSV

    Puoi accedere alla collezione columns ed al nome di ognuna
  • Re: Esportare dati CSV

    Cioe? non so farlo, sto studiando un po in giro ma non capisco. c'è una funzione che importando in base alla versione di office permette questa esportazione, ma non sapendo quale office hanno dove mando il file, volevo evitare.... quindi, in questo modo scrivo senza particolari esigenze, e mi manca l'head...
  • Re: Esportare dati CSV

    Un modo rapido che però produce un file di testo con separatori Tab è il seguente:
            Dim fname As String = "F:\Download\Output.txt"
            DBDataGridView.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
            DBDataGridView.SelectAll()
            IO.File.WriteAllText(fname, DBDataGridView.GetClipboardContent().GetText.TrimEnd)
            DBDataGridView.ClearSelection()
    altrimenti qualcosa del genere
           For Each colonna As DataGridViewColumn In DBDataGridView.Columns
                testo = testo & colonna.HeaderText & ";"
           Next
  • Re: Esportare dati CSV

    Bo, il primo metodo mi da solo l'intestazione della prima colonna e solo il primo record, non mi salva altro, il secondo suggerimento mi riporta ad un testo con l'header attaccato, a me invece servirebbe estrarre i dati come già correttamente li estraggo solo sta benedetta header non mi viene fuori... sto cercando in rete ma sembra io debba per forza importare un modulo, che oltretutto non riesco ad importare. (devo installarlo prima)
    non esiste nulla che mi dia il riferimento header?
  • Re: Esportare dati CSV

    Ok patel, giustamente il secondo codice funziona avevo toppato io a mettere la , con il ; e non mi separava, quindi recupero l'header, ma poi i dati a seguire non me li mette subito sotto... come mai?
  • Re: Esportare dati CSV

    Ok ho quasi, e dico quasi risolto, l'anomalia è che mi crea una riga con header e sotto i dati poi altra linea con header e sotto i dati...

    devo sistemare questo ora
     Dim salva As New System.IO.StreamWriter(My.Settings.percorso & "\DataBase.csv")
            Dim A As Integer
            Dim B As Integer
            Dim testo As String
            Dim thecsvfile As String = String.Empty
            For Each column As DataGridViewColumn In DBDataGridView.Columns
                thecsvfile = thecsvfile & column.HeaderText & ";"
            Next
            For A = 0 To DBDataGridView.Rows.Count - 1
                testo = ""
                For B = 0 To 8
                    If B < 8 Then
                        testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
                    Else
                        testo = testo & DBDataGridView.Rows(A).Cells(B).Value
                    End If
                Next
                salva.WriteLine(thecsvfile)
    
                salva.WriteLine(testo)
            Next
            salva.Close()
            MsgBox("File Esportato con successo", MsgBoxStyle.Information)
        End Sub
    dove sto toppando?
  • Re: Esportare dati CSV

    For Each column As DataGridViewColumn In DBDataGridView.Columns
    thecsvfile = thecsvfile & column.HeaderText & ";"
    Next
    produce una stringa con un ; finale, lo devi togliere
  • Re: Esportare dati CSV

    Prova così:
    (p.s. codice non testato)
     Dim salva As New System.IO.StreamWriter(My.Settings.percorso & "\DataBase.csv")
            Dim A As Integer
            Dim B As Integer
            Dim testo As String
            Dim thecsvfile As String = String.Empty
            For Each column As DataGridViewColumn In DBDataGridView.Columns
                thecsvfile = thecsvfile & column.HeaderText & ";"
            Next
            thecsvfile = thecsvfile.Substring(0, thecsvfile.Lenght - 1)
            salva.WriteLine(thecsvfile)
            For A = 0 To DBDataGridView.Rows.Count - 1
                testo = ""
                For B = 0 To 8
                    If B < 8 Then
                        testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
                    Else
                        testo = testo & DBDataGridView.Rows(A).Cells(B).Value
                    End If
                Next
                salva.WriteLine(testo)
            Next
            salva.Close()
            MsgBox("File Esportato con successo", MsgBoxStyle.Information)
        End Sub
  • Re: Esportare dati CSV

    Meglio ...
    
    For B = 0 To 8
       testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
    Next
    testo = testo.Substring(0, testo.Length - 1)
    
  • Re: Esportare dati CSV

    E se poi vuoi anche ottimizzare il tutto, invece di
    testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
    utilizza uno StringBuilder

    Maggiori info qui: http://www.ilgattoinformatico.it/2006/11/la-teoria-delle-stringhe-piu-veloci/
  • Re: Esportare dati CSV

    patel ha scritto:


    For Each column As DataGridViewColumn In DBDataGridView.Columns
    thecsvfile = thecsvfile & column.HeaderText & ";"
    Next
    produce una stringa con un ; finale, lo devi togliere
    Ciao, si ho visto quel ; alla fine però se non lo metto non mi separa i campi, prima avevo provato con una semplice "," ma ovviamente non andava, poi con il ";" va bene...
  • Re: Esportare dati CSV

    SirJo ha scritto:


    E se poi vuoi anche ottimizzare il tutto, invece di
    testo = testo & DBDataGridView.Rows(A).Cells(B).Value & ";"
    utilizza uno StringBuilder

    Maggiori info qui: http://www.ilgattoinformatico.it/2006/11/la-teoria-delle-stringhe-piu-veloci/
    Grazie Sergio, preciso come sempre, provo il tuo suggerimento del codice, per lo StringBuilder effettivamente leggo che è più performante ma con grandi valori... ovviamente sarebbe la scelta migliore se non si conosce la lunghezza da utilizzare nelle stringhe... quindi benvenga.

    Grazie
  • Re: Esportare dati CSV

    orione1976 ha scritto:


    patel ha scritto:


    For Each column As DataGridViewColumn In DBDataGridView.Columns
    thecsvfile = thecsvfile & column.HeaderText & ";"
    Next
    produce una stringa con un ; finale, lo devi togliere
    Ciao, si ho visto quel ; alla fine però se non lo metto non mi separa i campi, prima avevo provato con una semplice "," ma ovviamente non andava, poi con il ";" va bene...
    il separatore ; è necessario, ma devi togliere l'ultimo alla fine della stringa, Oregon ti ha indicato come
  • Re: Esportare dati CSV

    I file CSV possono essere principalmente di 3 tipi:
    1) con il separatore ","
    2) con il separatore ";"
    3) con il separatore TAB
    Quando si apre un file CSV normalmente il sistema chiede di quale tipo di CSV si tratta, (ad esempio su LibreOffice è così) e quindi mettere la virgola o mettere il punto e virgola è indifferente, basta specificarlo poi all'apertura.
    Strano quindi che con la virgola non ti abbia funzionato mentre con il punto e virgola sì.
    Io personalmente preferisco il CSV con il tabulatore, per il semplice fatto che la virgola e/o il punto e virgola potrebbero essere presenti dentro alla stringa che vado a scrivere nei campi, e quindi poi diventa difficile fare il parser per leggere il tutto, dato che bisogna aggiungere le doppie virgolette all'inizio e alla fine del campo e quindi il parser ne deve tenere conto, ma se all'interno della stringa c'è sia la virgola sia le doppie virgolette si diventa matti a codificare il tutto.
    Con il TAB invece non si hanno problemi, dato che il TextBox non permette l'inserimento del tasto TAB e quindi è semplicissimo creare il file CSV relativo e anche poi fare il parser.
    Ovviamente questa è solo una mia opinione, poi fate voi
Devi accedere o registrarti per scrivere nel forum
15 risposte