VB .NET - DataTable nach Excel exportieren

Da ich heute ein DataTable möglichst schnell und einfach als Bericht brauchte, habe ich nach einer Möglichkeit gesucht, dieses DataTable nach Excel zu exportieren.

Irgendwo im Internet habe ich dann folgenen, leicht abgeänderten Schnipsel entdeckt (die Quelle weiß ich leider nicht mehr).

Da ich das sicherlich noch häufiger brauche und andere eventuell auch, poste ich den Code mal hier.

Als Referenz muss das Excel COM Objekt zu den Projekt Referenzen hinzugefügt werden.

''' <summary>
  ''' Export a DataTable into an Excel Datasheet
  ''' </summary>
  ''' <param name="aDataTable"></param>
  ''' <param name="aOutputFilename"></param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public Shared Function DatatableToExcel(ByVal aDataTable As DataTable, 
ByVal aOutputFilename As String) As Boolean
 
    Dim app As New Excel.ApplicationClass
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
 
    wb = app.Workbooks.Add()
    ws = wb.ActiveSheet()
 
    Dim dc As DataColumn
    Dim dr As DataRow
    Dim colIndex As Integer
    Dim rowIndex As Integer
 
    ' Columns erstellen
    For Each dc In aDataTable.Columns
      colIndex += 1
      app.Cells(1, colIndex) = dc.ColumnName
    Next
 
    ' Rows hinzufügen
    For Each dr In dt.Rows
      rowIndex += 1
      colIndex = 0
      For Each dc In aDataTable.Columns
        colIndex += 1
        app.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
      Next
    Next
 
    ws.Columns.AutoFit()
 
    wb.SaveAs(aOutputFilename)
 
    wb.Close()
    app.Quit()
 
    wp = nothing
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wp)
    app = nothing
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app)
 
    GC.Collect()
    GC.WaitForPendingFinalizers()
 
    Return True
  End Function

Update am 01.12.2009:

Da ich immer häufiger auf die obigen Funktionen zugreife, habe ich meine Klasse ExcelTools mittlerweile etwas ergänzt. Wer möchte, kann sich den Quellcode hier herunter laden.

Projekt Vorschau

Hier eine kleine Vorschau des Projekts an dem ich gerade arbeite.

Wie man hoffentlich sieht, handelt es sich um einen App Launcher, also so etwas wie Launchy. Wenn das Projekt fertig ist, soll das Programm aber mehr können, als nur Programme zu öffnen. Ich habe folgendes geplant:

  • Starten, Beenden (und Bearbeiten) von Programmen
  • Öffnen und Bearbeiten von Dateien
  • Arbeiten mit markierten Dateien, Ordnern und Text
  • Index Unterstützung, d. h. eigene Indexer können beliebige Objekte (wie Mails, Termine, usw.) indexieren, mit denen dann gearbeitet werden kann.
  • Plugin Unterstützung, d. h. eigene Aktionen für Objekte können geschrieben werden. Beispielsweise könnte ein Mail Plugin E-Mails an indexierte Kontakte versenden, ein Packer-Plugin könnte markierte Ordner zipppen und via FTP-Plugin hochladen
  • Skin Unterstützung
  • Einfache(ste) Bedienung

Das wichtigste an diesem Programm wird die einfache Bedienung sein (auch wenn ich das als letzten Punkt in der Liste aufgeführt habe). So soll es mit nur wenigen Tastendrücken möglich sein, beispielsweise in Windows markierte Dateien zu zippen, zu verschlüsseln und anschließend auf einen FTP Server zu laden.

Dabei werden Plugins miteinander verknüpft die unterschiedliche Objekte an das nächste vom Benutzer ausgewählte Plugin zurückliefern.

Gemäß obigem Beispiel:

Ausgewählte Dateien -> Plugin: ZIP -> Gezippte Dateien -> Plugin: Verschlüsselung -> Verschlüsselte Dateien -> Plugin: FTP -> Auswahl FTP-Verbindungsdaten -> Fertig.

Wer Quicksilver für den Mac kennt, wird sicherlich viele Gemeinsamkeiten entdecken, was daran liegt, dass Quicksilver für mich eine Art inspirierende Vorlage war (was es für Windows Alternativen zu Quicksilver gibt, hat Lifehacker übrigens in diesem Artikel zusammengefasst).

Bis das alles so funktioniert wie ich das gerne hätte, muss ich aber noch einiges an Arbeit in das Projekt stecken. Ein Schritt in diese Richtung ist allerdings bereits gemacht.

VB .NET - Displayname / Beschreibung einer Datei ermitteln

Ich wollte für ein Programm an dem ich gerade arbeite statt der Dateiendung die Beschreibung zu der Dateiendung anzeigen.

Windows selbst zeigt diese Beschreibung beispielsweise in der Statusleiste des Explorers, wenn man auf eine bekannte Datei klickt. Beispielsweise bei "*.MOV" Dateien wäre die Anzeige (je nachdem mit welchem Programm die Endung verknüpft ist) "VLC media file (.mov)" oder "Quicktime Movie".

Nunja, als ich noch mit Delphi programmierte hätte ich hierzu die Shell32 SHGetFileInfo Funktion verwendet, doch unter .NET binde ich ungerne DLLs ein, also habe ich mir eine Funktion gebastelt, die die Info aus der Registry ausliest.

''' <summary>
  ''' Retrieve the Description/Displayname for a FileExtension
  ''' </summary>
  ''' <param name="aExtension">The Extension with a leading dot</param>
  ''' <returns>The Description of an Extension</returns>
  ''' <remarks></remarks>
  Public Shared Function GetDisplayNameFromExtension(ByVal aExtension As String) As String
 
    If aExtension = String.Empty Or Not aExtension.StartsWith(".") Then Return String.Empty
 
    ' First the get the key for the extension
    ' Extension is for example ".MOV", Key is "VLC.mov"
    Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(aExtension)
 
    If key IsNot Nothing Then
 
      ' Then we look in the sub key for the description
      Dim SubkeyName As String = key.GetValue(String.Empty)
      Dim SubKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(SubkeyName)
      If SubKey IsNot Nothing Then
        Return SubKey.GetValue(String.Empty)
      End If
 
    End If
 
    Return String.Empty
  End Function

Beispielaufruf:

Msgbox(GetDisplayNameFromExtension(".zip"))

Download <> Kauf

Ein US Richter hat glücklicherweise gerade bestätigt was für jeden normaldenkenden Menschen schon lange klar war:

17.000 illegale Downloads entsprechen nicht 17.000 potentiellen Käufen

via Slashdot bzw. Ars Technica.

Paul Blart - Mall Cop

Eine neue Komödie mit Kevin James (bekannt aus King of Queens) startete letzten Freitag den 16. Januar 2009 in den US Kinos.

Am 9. April wird "Der Kaufhaus Cop" dann in den deutschen Kinos zu sehen sein.

Der Trailer lässt auf eine wirklich lustige Komödie im Stil von "Kevin allein zu Haus" hoffen, obwohl die IMDB Bewertung mit 5.5 von 10 nicht sonderlich gut aussieht, aber was heisst das schon.

Die deutsche Version des Trailers findet man hier, und das beste, Kevin James hat Gott sei Dank, seine typische Synchronstimme bekommen.

Crank 2 - High Voltage Trailer

Es ist beinahe drei Jahre her, seit sich Chev Chelios so mit Adrenalin vollpumpen musste, dass er es über die knapp anderthalb Stunden Film schaffte.

Am 16. April ist es dann endlich soweit, da kommt der zweite Crank Teil (mit dem netten Zusatz: "He was dead...But he got better") in die deutschen Kinos.

Mit an Bord sind unter anderem David Carradine (der unter anderem in Death Race und Kill Bill mitwirkte) und jede Menge Stuntmen.

Der Trailer lässt auf einen guten Nachfolger im Stil des ersten Teils hoffen. Da auch die selben Regisseure mit von der Partie sind, kann eigentlich nicht mehr viel daneben gehen.Ich bin auf jeden Fall gespannt...

Worst Night Ever

Wie kann die schlimmste Nach ablaufen? Im folgenden eine mögliche Situation.

cassius_clay13: so I was with my friend bryan the other night in a bar
cassius_clay13: well he got really drunk and said he was gonna puke
cassius_clay13: so i helped him walk to the toilet
cassius_clay13: all the stalls were occupied
emoti_conartist: lol
cassius_clay13: bryan is a rugby player... so a big guy
cassius_clay13: so he fucking KICKS one of the stall doors open
cassius_clay13: and there's this guy in there taking a shit
emoti_conartist: hahahahahaha
cassius_clay13: and bryan throws up ALL OVER HIM
cassius_clay13: then (this is genius) bryan thinks 'oh shit... if i were taking a shit and someone came in and was sick all over me, i'd want to fuck him up... so i'd better hit him first'
cassius_clay13: so he fucking SMACKS this guy in the face
cassius_clay13: and runs away
cassius_clay13: imagine being that guy... WORST NIGHT OUT EVER

Original hier und mehr da.

 1 2 3 Weiter →