Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86

    [VS2005] Export data datagrid to file .csv

    Ciao a tutti!!

    Vi scrivo perchè ho il seguente problema. Devo esportare i dati da una datagridview ad un file .csv (formato Excel per intenderci). Ho guardato in lungo ed in largo e non riesco a trovare una soluzione al seguente messaggio di errore:

    Formato vecchio o libreria di tipo non valido. (Eccezione da HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

    Le operazioni che ho fatto sono state molteplici:

    - Ho cambiato la lingua nelle impostazioni internazionali
    - Ho impostato la lingua di installazione dell'ambiente di sviluppo alla lingua delle impostazioni internazionali
    - Ho installato le dll del tools di office per visual studio 2005 (in particolar modo Microsoft Office XP Primary Interop Assemblies Registration Utility)

    ma da sempre lo stesso errore.

    La parte di codice in cui vado a fare l'export dati dalla datagridview al file excel è la seguente:

    codice:
     
    
                ReDim arrCell(datagridMail.RowCount)
    
                Dim excelApp As New Excel.Application
                Dim excelBook As Excel.Workbook = excelApp.Workbooks.Add()  ' --> ERRORE
                Dim excelWorksheet As Excel.Worksheet = CType(excelBook.Worksheets(1), Excel.Worksheet)
    
                excelApp.Visible = False
                With excelWorksheet
    
                    Dim counter As Integer = 0
                    For Each dc As DataColumn In datatableMail.Columns
                        .Range(arrCell(counter) & "1").Value = dc.ColumnName.ToString().Trim()
                        .Range(arrCell(counter) & "1").ColumnWidth = 15
                        counter = counter + 1
                    Next
    
                    Try
                        counter = 2
                        For Each dr As DataRow In datatableMail.Rows
                            For i = 0 To datatableMail.Columns.Count - 1
                                If dr(i) Is System.DBNull.Value Then
                                    .Range(arrCell(i) & counter.ToString()).Value = ""
                                Else
                                    .Range(arrCell(i) & counter.ToString()).Value = dr(i).ToString()
                                End If
                            Next
                            counter = counter + 1
                        Next
    
                    Catch ex As Exception
                        MessageBox.Show("NON VA", "ERRORE", MessageBoxButtons.OK)
                    End Try
    
                    excelWorksheet.SaveAs(filename)
                    excelApp.Quit()
                    excelApp = Nothing
                End With
    Grazie mille!!

    Ciao

    Rick

  2. #2
    il csv è un comma separated value, non è un formato excel, che poi
    excel lo apra e suddivida i valori in colonne e tutto un altro paio di maniche.
    Per esportare i valori in formato csv basta che cicli e ti metti i valori in una stringa
    separati da ; possibilmente e poi ti salvi la stringa in un file.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    86
    Faccio il punto della situazione:

    - Riesco ad estrarre i dati dal db, a passarli alla datagrid ed anche al file sia che sia txt sia che sia csv.

    Il problema è che nel mio file non ci finiscono tutti i dati. In particolar modo vengono tralasciate le ultime 4/5 righe dei dati che sono presenti nella mia datagrid e l'ultimo che inserisce lo tronca a metà (ad esempio: ipotizzando che i dati presenti siano degli indirizzi mail tronca il dato a zzzzrrrrhhhh@lib ).

    Il codice che fa tutto ciò è questo:

    codice:
         
            Try
                db_connessione.Open()
                dataadapter.Fill(ds)
                dgrMail.DataSource = ds
                txtTotMail.Text = dgrMail.RowCount
                db_connessione.Close()
    
                Dim count_rows As Integer = 0
    
                count_rows = dgrMail.Rows.Count
    
                Do While i <> count_rows - 1
                    sw1.WriteLine(dgrMail.Item(0, i).Value & ";")
                    i = i + 1
                Loop
    
            Catch ex As OdbcException
                MessageBox.Show(ex.Message, "Attenzione", MessageBoxButtons.OK)
            End Try
    Grazie a chi sa darmi una mano!!

    Ciao

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