Benutzer mit den meisten Antworten
Excel Tabelle mit oleDB auslesen

Frage
-
Hallo Leute,
ich habe folgendes Problem.
Ich habe eine Excel Tabell mit 4 Spalten [A_D].
Diese Tabelle möchte ich auslesen.
Naja nun habe ich mich durch einige tutorials gelesen aber iwie komme ich nich weiter.
Hier mal mein code
string file = @"D:\Dokumente und Einstellungen\Desktop\adressliste.xls"; OleDbConnection con = new OleDbConnection(); con.ConnectionString = "Data Source=" + file + ";Provider=Microsoft.Jet.OLEDB.4.0;"; con.ConnectionString += @"Extended Properties=""Excel 8.0;HDR=No"""; con.Open(); OleDbCommand command = new OleDbCommand("SELECT * FROM adressliste2009", con); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = command; DataSet ds = new DataSet(); adapter.Fill(ds); DataTable tbl = ds.Tables["adressliste2009"]; con.Close(); foreach(DataRow row in tbl.Rows) { MessageBox.Show(row["A"].ToString()); }
Meine Idee ist halt bei jedem Schleifendurchlauf über row[A] - row[D] an die jeweiligen einträge zu kommen.
Und an dieser Fehlermeldung hänge ich nun
Das Microsoft Jet-Datenbankmodul konnte das Objekt 'adressliste2009' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- und Pfadangaben richtig eingegeben wurden.
der pfad zu excel datei ist der richtige, und die Arbeitsmappe heisst adressliste2009.
Schonmal besten Dank für jegliche Hilfe :)
mfg
mo
Antworten
-
Hallo,
bei Arbeitsblättern wird ein $-Zeichen angehängt, dahinter kannst Du zusätzlich einen Bereich angeben,
siehe dazu Konventionen für die Benennung von Tabellen in
Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NETGruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. Januar 2012 17:18
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 17:53
-
Hi,
ich habe mir mal vor längerer Zeit nen Excelreader geschrieben. Evtl. kannst du den für deine Zwecke erweitern oder Codeteile nutzen :
private ILogger _logger; private string _newFile; public ExcelReader(ILogger logger) { _logger = logger; } public DataSet GetExcelData(string filePath) { if (string.IsNullOrEmpty(filePath)) throw new NullReferenceException("Der Dateiname darf nicht NULL oder Leer sein !"); if (!File.Exists(filePath)) throw new FileNotFoundException("Die angegebene Datei wurde nicht gefunden", filePath, new Exception("Datei nicht gefunden")); return GetData(filePath); } private DataSet GetData(string filePath) { var set = new DataSet(Path.GetFileName(filePath)); using (var connection = new OleDbConnection(GetExcelConnectionString(filePath))) { try { connection.Open(); } catch (OleDbException ex) { if (ex.Message.Contains("exklusiv")) return GetData(CopyFileAndReturnNewConnection(filePath)); } var tablenames = GetDataSheetName(connection.GetSchema("Tables")); foreach (string s in tablenames) { var select = String.Format("SELECT * FROM [{0}]", s.Replace("'", "")); try { using (var adapter = new OleDbDataAdapter(select, connection)) { var dt = new DataTable(s); adapter.Fill(dt); set.Tables.Add(dt); } } catch (Exception ex) { _logger.LogMessage( String.Format("{0} konnte nicht ausgeführt werden : {1}", select, ex.Message), ToString(), LogLevel.Warning); } } } if (!string.IsNullOrEmpty(_newFile)) File.Delete(_newFile); _newFile = null; return set; } private string CopyFileAndReturnNewConnection(string filePath) { _newFile = Path.Combine(Path.GetTempPath(), Path.GetFileName(filePath)); File.Copy(filePath,_newFile,true); return _newFile; } private IEnumerable<string> GetDataSheetName(DataTable table) { return from DataRow row in table.Rows select row["TABLE_NAME"].ToString(); } private string GetExcelConnectionString(string filePath) { return String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\"{0}\";Extended Properties=\"Excel 8.0;IMEX=1\"", filePath); } }
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. Januar 2012 17:18
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 17:53
Alle Antworten
-
Hallo,
bei Arbeitsblättern wird ein $-Zeichen angehängt, dahinter kannst Du zusätzlich einen Bereich angeben,
siehe dazu Konventionen für die Benennung von Tabellen in
Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NETGruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. Januar 2012 17:18
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 17:53
-
Hi,
ich habe mir mal vor längerer Zeit nen Excelreader geschrieben. Evtl. kannst du den für deine Zwecke erweitern oder Codeteile nutzen :
private ILogger _logger; private string _newFile; public ExcelReader(ILogger logger) { _logger = logger; } public DataSet GetExcelData(string filePath) { if (string.IsNullOrEmpty(filePath)) throw new NullReferenceException("Der Dateiname darf nicht NULL oder Leer sein !"); if (!File.Exists(filePath)) throw new FileNotFoundException("Die angegebene Datei wurde nicht gefunden", filePath, new Exception("Datei nicht gefunden")); return GetData(filePath); } private DataSet GetData(string filePath) { var set = new DataSet(Path.GetFileName(filePath)); using (var connection = new OleDbConnection(GetExcelConnectionString(filePath))) { try { connection.Open(); } catch (OleDbException ex) { if (ex.Message.Contains("exklusiv")) return GetData(CopyFileAndReturnNewConnection(filePath)); } var tablenames = GetDataSheetName(connection.GetSchema("Tables")); foreach (string s in tablenames) { var select = String.Format("SELECT * FROM [{0}]", s.Replace("'", "")); try { using (var adapter = new OleDbDataAdapter(select, connection)) { var dt = new DataTable(s); adapter.Fill(dt); set.Tables.Add(dt); } } catch (Exception ex) { _logger.LogMessage( String.Format("{0} konnte nicht ausgeführt werden : {1}", select, ex.Message), ToString(), LogLevel.Warning); } } } if (!string.IsNullOrEmpty(_newFile)) File.Delete(_newFile); _newFile = null; return set; } private string CopyFileAndReturnNewConnection(string filePath) { _newFile = Path.Combine(Path.GetTempPath(), Path.GetFileName(filePath)); File.Copy(filePath,_newFile,true); return _newFile; } private IEnumerable<string> GetDataSheetName(DataTable table) { return from DataRow row in table.Rows select row["TABLE_NAME"].ToString(); } private string GetExcelConnectionString(string filePath) { return String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\"{0}\";Extended Properties=\"Excel 8.0;IMEX=1\"", filePath); } }
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Montag, 9. Januar 2012 17:18
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 17:53
-
Hallo mo78,
Haben Dir die Antworten geholfen?
Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo mo78,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.