MS Excel CSV Import mit VB.NET
Achtung : Der DataTable Adapter ist veraltet und wird nicht mehr weiterentwickelt! Alle hier beschriebenen Umwandlungen können besser und einfacher mit den integrierten Daten Adaptern durchgeführt werden.
Hier ein kleines Visual Basic .NET Beispiel, mit dem veranschaulicht wird, wie der .NET DataTable Adapter dazu verwendet werden kann wie beliebige Datenquellen und Ziele in den FlowHeater eingebunden werden können.
Das Beispiel ist natürlich als Visual Studio Solution im Quellecode verfügbar.
Hinweis: Das Beispiel dient nur zur Demonstration. Der Excel Import/Export ist mit dem Excel Adapter wesentlich einfacher durchzuführen! Wenn Sie das Beispiel ausprobieren möchten, benötigen Sie mindestens Microsoft Excel 97 auf Ihrem Rechner!
Nachdem Sie die Definition geöffnet haben sieht Ihr Bildschirm ungefähr so aus wie oben dargestellt. Die READ Seite ist nicht sehr spektakulär, hier wird lediglich eine kleine CSV Textdatei "MS-Excel-CSV-Import.txt" gelesen. Gehen wir gleich zum Configurator der WRITE Seite über. Die Excel-Import.dll beinhaltet nur eine Visual Basic .NET Funktion, die den Inhalt der WRITE Seite in eine Excel Arbeitsmappe "Output.xls" am Ende anfügt, bzw. falls die Excel Arbeitsmappe noch nicht existiert vorher anlegt.
Führen Sie die Definition aus und schauen Sie sich den VB .NET Source Code an. Die Visual Studio Solution finden Sie im Verzeichnis Examples\DE\DataTableAdapter\VSExcelImport.
VB.NET Code für den Excel Import
Public Sub FlowHeater_SetDataTable(ByRef dt As DataTable)
If (dt.Rows.Count = 0) Then
' Testaufruf aus FlowHeater Designer oder nichts zu tun
Exit Sub
End If
Dim excel As Object
'Excel Object erzeugen
excel = CreateObject("Excel.Application")
'excel.Visible = True
Dim filename As String
filename = Path.Combine(System.Environment.CurrentDirectory, "Output.xls")
' Falls noch nicht vorhanden anlegen
If File.Exists(filename) Then
excel.Workbooks.Open(filename)
Else
excel.Workbooks.Add()
excel.ActiveWorkbook.SaveAs(filename)
End If
Dim workbook As Object
workbook = excel.ActiveWorkbook
If workbook.Worksheets.Count() = 0 Then
workbook.Worksheets.Add()
End If
Dim worksheet As Object
worksheet = workbook.Worksheets(1)
Dim nRow As Integer
nRow = 1
' 1. freie Zeile suchen
Do While True
Dim range As Object
range = worksheet.Cells(nRow, 1)
Dim cellValue As String
cellValue = String.Empty
If range.Value2 <> Nothing Then
cellValue = range.Value2.ToString()
End If
If cellValue.Length() = 0 Then
Exit Do
End If
nRow = nRow + 1
Loop
Dim dr As DataRow
For Each dr In dt.Rows
Dim col As DataColumn
Dim nCol As Integer
nCol = 1
For Each col In dt.Columns
worksheet.Cells(nRow, nCol) = dr(col)
nCol = nCol + 1
Next col
nRow = nRow + 1
Next dr
workbook.Save()
excel.Quit()
End Sub
Microsoft®, Windows®, Excel®, Visual Basic® sind eingetragene Markenzeichen der Microsoft Corporation