Fragensteller
Excel Steuerung: Sort und deutsche Sonderzeichen

Allgemeine Diskussion
-
Hallo Experten,
ich muss für einen Datenimport in MSSQL alte Daten aus DBF Dateien auslesen und konvertieren. Mir ist nichts besseres eingefallen, als das über Excel Automation zu machen. Das funktioiert bis auf folgende Probleme:
1. Deutsche Sonderzeichen
Gibt es eine Möglichkeit beim Öffnen der Tabelle den Zeichensatz zu ändern?
2. Sortieren der Daten
_oRng.Sort(_oRng.Columns[12, Type.Missing], Excel.XlSortOrder.xlAscending, _oRng.Columns[3, Type.Missing], Type.Missing, Excel.XlSortOrder.xlAscending, Type.Missing, Excel.XlSortOrder.xlAscending, Excel.XlYesNoGuess.xlYes, Type.Missing, Type.Missing, Excel.XlSortOrientation.xlSortColumns, Excel.XlSortMethod.xlPinYin, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal, Excel.XlSortDataOption.xlSortNormal);
Das funktioniert, ich würde aber die Sortierung über mehr Spalten benötigen. Habe auch schon mit mehreren Sortierläufen hintereinander probiert, scheint zu gehen, wenn ich mit den niederwertigesten Spalten beginne, bin mir aber nicht sicher ob ich mich darauf verlassen kann. Die Methode Sort() scheint nur 2 Spalten zu unterstützen, zumindest bekomme ich eine Fehlermeldung wenn ich weniger oder mehr Spalten angebe.
Freue mich auf Eure Tipps,
Siegfried
- Typ geändert Stefan FalzModerator Dienstag, 21. April 2015 23:28 Keine bestätigte Lösung
Alle Antworten
-
Hallo Siegfried,
ich würde die Daten in eine Access Datenbank importieren und von dort dann in den SQL Server schieben. Die neuen Versionen (IIRC ab 2010) können allerdings nicht mehr direkt mit DBase Dateien umgehen, daher müsstest Du entweder eine ältere Access Version verwenden oder den Import über ein kleines Skript durchführen.
Leg dazu eine leere MDB Datei (keine ACCDB) an, zur Not die ACCDB +ber Access im Access 2003 Format speichern und erstell eine kleine .NET Anwendung, die folgendes ausführt:
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\Ordner\Import.mdb;" Dim Connection As New OleDbConnection( ConnectionString ) Connection.Open() Dim SqlCommand As String = "SELECT * INTO [DBaseImport] FROM [DBASETAB] IN ""X:\Ordner\DBase\"" ""DBASE IV;"" " Dim Command As New OleDbCommand( SqlCommand, Connection ) Command.Dispose() Connection.Close() Connection.Dispose()
Die Anwendung muss explizit als x86 kompiliert werden, da die JET Engine nur als 32 Bit Variante zur Verfügung steht. (Es geht zwar AFAIK auch per ACE, das müsste man aber auch erstmal in der richtigen Variante installieren, ... JET steht auf jedem System automatisch zur Verfügung)
Dein Problem mit der Sortierung sollte dann auch nicht mehr vorhanden sein, da Du aus Access heraus dann per ORDER BY Spalte1, Spalte2, Spalte3, ... deine Sortierung wie gewünscht angeben kannst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
vielen Dank für Deinen Vorschlag. Ich habe leider nur ein altes Office 2000 mit Access, die neueren Versionen habe ich ohne Access gekauft. Ich glaube, das ließ sich gar nicht parallel zu einer anderen Office Version installieren. Ich habe das ganze auch schon zu drei Viertel fertig. Nur bei den letzten Tabellen gibt es zusammengesetzte Schlüssel mit Relationen untereinandner, wodurch ich das Problem habe. Ich warte einmal ab, ob vielleicht sonst jemand eine Idee hat. Wenn ich es sonst nicht schaffe muss ich ohnehin Deinem Vorschlag folgen.
Hast Du eine Idee ob sich das Problem mit dem Zeichensatz (deutsche Sonderzeichen) mit Excel oder Access lösen lässt?
Grüße
Siegfried
-
Hallo Siegfried,
mit Office 2000 sollte es doch problemlos funktionieren (nur die neuen Office Versionen können damit nichts mehr anfangen), die DBase Dateien in Access zu importieren. Das geht fix und ob das Problem mit dem Zeichensatz damit lösbar ist, kannst Du dann ja schnell sehen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
ich habe es mit Access 2000 versucht. Leider lassen sich einige Tabellen nicht importieren. Es kommt die Meldung: 'Die externe Tabelle hat nicht das erwartete Format'. Ich bin der Sache nachgegangen, das sind jene Tabellen, welche ein Memofeld beinhalten. Wenn eine Tabelle ein Memofeld enthält, besteht die Tabelle aus zwei Dateien (dbf und fpt).
Gruß, Siegfried
-
Hallo Siegfried,
hierfür kannst Du, wenn ich das richtig lese, die FoxPro Treiber verwenden. Die können mit dem DBase Format umgehen und die Memofelder sollten dabei auch korrekt verarbeitet werden.
http://www.pcreview.co.uk/threads/import-dbf-files-with-memo-fields.2651051/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
vielen Dank für Deine Mühen. Ich musste es jetzt beim Excel belassen, weil ich morgen ein Ergebnis liefern muß. Das Sortierproblem habe ich so gelöst, dass ich, wenn ich nach 6 Spalten sortieren muß, 3 Sortierläufe mache. Beginnend mit den niederwertigsten Spalten werden die Zeilen so richtig sortiert.
Bleibt noch das Problem mit dem Zeichensatz. Muß ich wahrscheinlich im Programm jedes einzelne Feld anfassen.
Grüße
Siegfried