Excel-Tabelle lesen: Auslesen einer Excel-Tabelle mit C#

Während CSV-Dateien quasi zum Standard für den Datenaustausch definierter Listen erklärt haben, sind Excel-Tabellen für den Datenaustausch eher das letzte Mittel von Privatanwendern. Zu Recht, denn zu groß ist die Gefahr, dass die verwendete Version von Excel nicht kompatibel mit der Version von Excel ist, die der Anwender nutzt. Und kann ich überhaupt voraussetzen, dass der Empfänger zahlender Kunde von Microsoft ist und Excel nutzt?
Trotz dieser Bedenken stößt man immer wieder, wenn auch selten, auf Excel-Listen, die Firmen zum Datenaustausch bereitstellen. Und da wir alle Freunde von Automationen sind, möchten wir natürlich auch automatisiert auf die Excel-Tabellen zugreifen.

Selbstredend kann C# den Zugriff auf Excel-Tabellen gewähren, schließlich nutzen wir das .NET-Framework und es ist nur eine Frage, wie man dies am schnellsten erledigt. Zuerst binden wir in unserem Visual Studio-Projekt unter VERWEISE/COM die „Microsoft Excel 11.0 Object Library“ (oder eine andere Version) ein. Als Using-Direktive nutzen wir „using Excel = Microsoft.Office.Interop.Excel;“. Schon haben wir das nötige Rüstzeug, um automatisiert auf die Excel-Tabelle zuzugreifen.

Wie wir im folgenden Code stehen können, können wir durch die Interop.Excell.dll relativ schnell Zugriff auf die Tabelle erhalten. Der Zugriff auf die Tabelle erfolgt mittels „xlApp.Workbooks.Open“. Es ist von Vorteil, zuvor das vorhandensein der Excel-Tabelle mittels „if (File.Exists(sFile))“ zu prüfen.
Neben einigen Definitionen wird der Code erst mit der Zeile „xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);“ interessant. Wir erhalten hier Zugriff auf das erste Excel-Tabellenblatt. Dann ermitteln wir die Größe/Range der Tabelle und gehen die Zeilen mittels for-Schleife durch. Um eine Zelle in einer bestimmten Spalte auszulesen, nutzen wir einfach „string sZelleSpalte1 = (string)(range.Cells[rCnt, 1] as Excel.Range).Value2;“

 

static private void ReadExcel(string sFile)
{
try
       {
       	Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        Excel.Range range;

        int rCnt = 0;
        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Open(sFile, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        range = xlWorkSheet.UsedRange;

        //Gehe das ganze Zabellenblatt durch
        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            //Hier haben wir Zugriff auf jede Zeile
            if ((range.Cells[rCnt, 1] as Excel.Range).Value2 != null)
            {
                try
                {
                   string sZelleSpalte1 = (string)(range.Cells[rCnt, 1] as Excel.Range).Value2;
                   string sZelleSpalte2 = (string)(range.Cells[rCnt, 2] as Excel.Range).Value2;
                  }
                 catch { }
              }
         }

          xlWorkBook.Close(true, null, null);
          xlApp.Quit();
      }
      catch (Exception ex)
      {
         Console.WriteLine("Fehler in ReadExcel: " + ex.Message);
       }
}

Schreibe einen Kommentar