Creare file CSV a run-time a partire da un dataset

di Riccardo Golia, in DotNet,

Oggi mi è capitato di crearmi una classe per la generazione run-time di file CSV (apribili tramite MS Excel). All'istanza di classe viene passato un dataset (argomento sul costruttore) contenente una o n tabelle; il metodo di generazione crea un file CSV per ogni tabella del dataset, inserendo automaticamente intestazione e dati separati dal carattere ; e contenuti tra doppi apici (per gestire i caratteri speciali). Creare file CSV è un ottimo sistema per esportare informazioni utilizzando un formato non proprietario (un file CSV è in realtà un file di testo formattato secondo certe regole), ma compatibile con i principali programmi per la trattazione di fogli elettronici come Excel.

'*******************************************************
' CLASSE CSVREPORT
'*******************************************************
' Classe che rappresenta il documento CSV.

Public Class CSVReport
Implements IDocument

'*******************************************************

Public ReadOnly FileName As String
Public ReadOnly FileSystemPath As String
Private dataSource As DataSet

'*******************************************************

Public Sub New(ByVal fsPath As String, ByVal fName As String, ByRef data As DataSet)

Try

' Assegna il valore al campo FileSystemPath
Me.FileSystemPath = fsPath

' Assegna il valore al campo FileName
Me.FileName = fName

' Assegnazione della DataSource
Me.dataSource = data

Catch ex As Exception
Throw New Exception("Errore durante la generazione del documento CSV. Messaggio dell'eccezione: " & ex.Message)
End Try

End Sub

'*******************************************************

Public Function GenerateDocument() As String Implements IDocument.GenerateDocument

Dim writer As IO.StreamWriter
Dim i, j, k As Integer

Try

For k = 0 To Me.dataSource.Tables.Count - 1
If Not IO.File.Exists(Me.FileSystemPath & Format(k, "00") & "#" & Me.FileName) Then
writer = IO.File.CreateText(Me.FileSystemPath & Format(k, "00") & "#" & Me.FileName)
Else
writer = New IO.StreamWriter(Me.FileSystemPath & Format(k, "00") & "#" & Me.FileName, False)
End If
For i = 0 To Me.dataSource.Tables(k).Rows.Count - 1
If i = 0 Then
For j = 0 To Me.dataSource.Tables(k).Columns.Count - 1
If j < Me.dataSource.Tables(k).Columns.Count - 1 Then
writer.Write("""" & Me.dataSource.Tables(k).Columns(j).ColumnName & """;")
Else
writer.WriteLine("""" & Me.dataSource.Tables(k).Columns(j).ColumnName & """;")
End If
Next j
End If
For j = 0 To Me.dataSource.Tables(k).Columns.Count - 1
If j < Me.dataSource.Tables(k).Columns.Count - 1 Then
writer.Write("""" & Me.dataSource.Tables(k).Rows(i)(j) & """;")
Else
writer.WriteLine("""" & Me.dataSource.Tables(k).Rows(i)(j) & """;")
End If
Next j
Next i
writer.Close()
Next k

Return Me.FileSystemPath & Format(k - 1, "00") & "#" & Me.FileName

Catch ex As Exception
Throw New Exception("Errore durante la generazione del documento CSV. Messaggio dell'eccezione: " & ex.Message)
End Try

End Function

'*******************************************************

End Class

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese