Hallo,
ich möchte gerne die Daten einer Excel Tabelle einlesen. Die Datei hat 3 sheets mit den Werten (Strings, Zahlen), die ich mit C# einlesen möchte. Dazu verwende ich die folgende Methode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| private DataSet ImportParameter() { string excelFile = Global.Path + Global.ParameterFile;
DataSet ExcelParameter = new DataSet();
OleDbConnection con = new OleDbConnection(); con.ConnectionString = "Data Source=" + excelFile + ";Provider=Microsoft.Jet.OLEDB.4.0;";
con.ConnectionString += @"Extended Properties=""Excel 8.0;HDR=Yes""";
con.Open(); DataTable sheets = con.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); foreach (DataRow sheet in sheets.Rows) { string tableName = sheet["Table_Name"].ToString(); string sql = "SELECT * FROM [" + tableName + "]"; OleDbDataAdapter adap = new OleDbDataAdapter(sql, con); adap.Fill(ExcelParameter, tableName); }
con.Close(); return ExcelParameter; } |
Eingelesen wird in ein DataSet. Wenn ich jetzt einen Breakpoint setze und im DataSet Visualizer nachschaue was für Werte eingelesen wurden, muss ich leider feststellen, dass zwar alle sheets eingelesen wurden und auch alle Spalten und Zeilen eingelesen wurden, aber leider wurden dabei nicht alle Werte gelesen.
Zahlen sind scheinbar kein Problem, aber bei Strings werden diese meistens nicht eingelesen und die entsprechenden Zellen bleiben leer. Besonders seltsam dabei finde ich, dass von einer Zeile in Excel bestehend aus Strings nur die letzten 10 (von ca. 50) korrekt eingelesen werden.
Wenn ich jetzt im DataSet Visualizer quasi paar Hand Daten eintrage, ja ich weiß das macht man normalerweise nicht, dann behauptet er der Datentyp würde nicht stimmen und dasss er Double Werte erwarten würde. Ich weiß leider nicht wie der dadrauf kommt. Festgelegt habe ich das jedenfalls nicht.
Ich hoffe einer von euch kann mir hier weiter helfen.
Danke schon einmal im Voraus für eure Hilfe.
Scofield2011