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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- I design pattern di .NET, il 13 luglio 2005 alle 12:02
- Transazioni con Data Access Application Block: non mi convince!, il 10 gennaio 2005 alle 21:10
- SSL e il degrado di prestazioni nei WS, il 23 novembre 2004 alle 22:40
- DataAdapter e connessioni , il 22 ottobre 2004 alle 14:50
- Concatenazione dei costruttori di una classe, il 7 settembre 2004 alle 16:07
- .NET e COM: l'unione fa la forza!, il 27 agosto 2004 alle 15:42