PDA

Visualizza la versione completa : [VS2005] Export data datagrid to file .csv


Rik142
08-10-2009, 17:56
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:




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

Max Mercury
08-10-2009, 19:18
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.

Rik142
19-10-2009, 16:04
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:



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

Loading