Halbleeres Excel mit SSIS importieren

Die Frage ob ein Glas halbvoll oder halbleer ist, unterscheidet Optimisten von Pessimisten. In meinem Fall war das Excel-Sheet noch deutlich schlechter gefüllt!

Gegeben war also ein Excel-Sheet, welches eine externe Software zum Datenaustausch zur Verfügung stellt. Man stelle es sich als 20 Spalten und 1000 Zeilen vor. Leider sind aber einige Spalten nur sehr sporadisch gefüllt. Wie man aus diesem Artikel lernt erscheinen einige Spalten schon mal als NULL, auch wenn die zugrundeliegenden Daten nicht NULL sind.

Ursache ist hierfür die Begrenzung des Excel ISAM-Treibers, welcher aus den ersten Zeilen einer Spalte den Datentyp der Spalte erschliesst. Für alle anderen Daten, die nicht dem Datentyp entsprechen wird dann NULL zurückgegeben.
Für die ersten leeren Zellen ermittelt der Treiber also als Typ "Zeichen" und sobald dann numerische Werte kommen unterschlägt er diese.

Wie kann man dies nun umgehen?
Die erste Möglichkeit ist es alle Zellen entsprechend im Excel zu formatieren, was aber oft nicht praktikabel ist. Die zweite Möglichkeit wäre die Konvertierung in einen Flat-File und diesen dann zu verarbeiten. Glücklicherweise bekam ich von einem PASS-Freund (Dank an Dr. Helmut Knappe) den entscheidenden Hinweis auf einen Registry-Eintrag, welcher dieses Verhalten beeinflusst.

Der Schlüssel heisst TypeGuessRows und sein Default-Wert ist 8. Ich habe ihn aber für meine Zwecke auf 100 gesetzt. Man findet ihn unter

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

Ab dieser Änderung werden vom SSIS-Paket die ersten 100 Zeilen untersucht und Rückschlüsse auf den richtigen Datentyp gezogen. Man muss diese Änderung natürlich nicht nur auf dem Entwickler-System durchführen, sondern auch auf dem produktiven System, da sie nicht Bestandteil des SSIS-Paketes ist.

Auf einem 64-Bit-System funktioniert es übrigens auch, wobei man bedenken muss, dass Jet dort nicht nativ zur Verfügung steht. Man findet den Schlüssel dann unter:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel