none
Excel Tabelle mit oleDB auslesen RRS feed

  • 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
    Dienstag, 3. Januar 2012 19:41

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 .NET

    Gruß Elmar

    Dienstag, 3. Januar 2012 20:26
    Beantworter
  • 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);
            }
        }
    


    Donnerstag, 5. Januar 2012 12:04

Alle Antworten