Das Lesen einer Excel-Datei in C# ist eine häufige Aufgabe für Berichte, Datenimporte und Automatisierung. Mit Free Spire.XLS for .NET, einer kostenlosen Community-Edition, können Sie eine Excel-Arbeitsmappe laden und ihre Daten lesen, ohne Microsoft Excel auf dem Computer zu installieren und ohne Interop zu verwenden. Dieser Artikel zeigt, wie Sie Zellen, Arbeitsblätter und Zeilen lesen, ein Arbeitsblatt in eine DataTable exportieren und Formelergebnisse behandeln.
Schnellstart: Eine Excel-Datei in C# lesen
Installieren Sie Free Spire.XLS for .NET von NuGet. Führen Sie diesen Befehl in einem Terminal aus:
dotnet add package FreeSpire.XLS
Oder führen Sie diesen Befehl in der NuGet-Paket-Manager-Konsole aus:
Install-Package FreeSpire.XLS
Sie können auch Free Spire.XLS for .NET herunterladen und die DLL manuell referenzieren oder das Paket auf NuGet finden.
Das folgende Beispiel lädt eine Excel-Datei, ruft das erste Arbeitsblatt ab und gibt den Wert der Zelle A1 aus. Ersetzen Sie input.xlsx durch den vollständigen Pfad zu Ihrer Datei, oder stellen Sie sicher, dass sich die Datei im aktuellen Arbeitsverzeichnis des Programms befindet.
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
// Load an existing Excel file
workbook.LoadFromFile("input.xlsx");
// Get the first worksheet
Worksheet sheet = workbook.Worksheets[0];
// Read the value of cell A1 (row 1, column 1)
string value = sheet.Range[1, 1].Value;
Console.WriteLine("Cell A1: " + value);
}
finally
{
workbook.Dispose();
}
}
}
Workbook.LoadFromFile() liest die Datei in den Arbeitsspeicher. Worksheets[0] gibt das erste Arbeitsblatt zurück, und Range[1, 1].Value gibt den Textwert der Zelle in der ersten Zeile und ersten Spalte zurück. Der finally-Block gibt die Ressourcen der Arbeitsmappe frei, wenn Sie fertig sind.

Eine bestimmte Zelle oder ein Arbeitsblatt lesen
In den folgenden Beispielen wird davon ausgegangen, dass workbook bereits mit LoadFromFile() geladen wurde. Sie zeigen, wie Sie über Index oder Namen auf ein Arbeitsblatt zugreifen.
Eine Excel-Datei kann mehrere Arbeitsblätter enthalten. Sie können ein Arbeitsblatt über seine Position oder seinen Namen abrufen:
// By index (zero-based): the first sheet is 0, the second is 1
Worksheet first = workbook.Worksheets[0];
// By name
Worksheet sales = workbook.Worksheets["Sales"];
Sie können eine Zelle auch über ihre Zeilen- und Spaltennummern oder über ihre Excel-Adresse lesen:
// By row and column numbers (one-based): row 2, column 3
string byIndex = sales.Range[2, 3].Value;
// By Excel address
string byAddress = sales.Range["C2"].Value;
Beachten Sie die beiden unterschiedlichen Startpunkte. Die Arbeitsblattsammlung ist nullbasiert, sodass das erste Arbeitsblatt Worksheets[0] ist. Zellzeilen- und Spaltennummern sind einsbasiert, sodass Range[1, 1] die Zelle A1 ist.
Um einen Zellblock zu lesen, übergeben Sie eine Bereichsadresse und durchlaufen Sie ihn:
CellRange range = sales.Range["A1:C3"];
foreach (CellRange cell in range.CellList)
{
Console.WriteLine({BODY_CONTENT}quot;{cell.RangeAddress}: {cell.Value}");
}
Excel-Daten Zeile für Zeile in C# lesen
Um alle Daten in einem Arbeitsblatt zu lesen, durchlaufen Sie die Zeilen mit einer äußeren Schleife und die Spalten mit einer inneren Schleife. Schreiben Sie nach jeder Zeile einen Zeilenumbruch, damit die Konsolenausgabe die Struktur des Arbeitsblatts beibehält:
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastDataRow; row++)
{
for (int col = 1; col <= sheet.LastDataColumn; col++)
{
Console.Write({BODY_CONTENT}quot;{sheet.Range[row, col].Value}\t");
}
Console.WriteLine();
}
}
finally
{
workbook.Dispose();
}
}
}
Die Schleifen laufen von Zeile 1 und Spalte 1 bis LastDataRow und LastDataColumn, die die letzte Zeile und Spalte zurückgeben, die Daten enthalten. Dadurch werden formatierte, aber leere Zellen vermieden, die LastRow und LastColumn abdecken würden. Wenn Ihr Arbeitsblatt ein ungewöhnliches Layout hat, überprüfen Sie den tatsächlichen Bereich in Ihrer Testdatei, bevor Sie die Ausgabe verarbeiten.
Für ein Arbeitsblatt, das die folgenden Beispieldaten enthält:
| Produkt | Kategorie | Preis |
|---|---|---|
| Tastatur | Zubehör | 25 |
| Monitor | Displays | 180 |
zeigt die Konsole jede Arbeitsblattzeile in einer eigenen Zeile an, wobei die Zellwerte durch Tabs getrennt sind:
Product Category Price
Keyboard Accessories 25
Monitor Displays 180

Excel-Daten in eine DataTable lesen
Wenn Sie Arbeitsblattdaten mit ADO.NET verarbeiten, an ein Steuerelement binden oder in eine Datenbank einfügen möchten, exportieren Sie das Arbeitsblatt mit ExportDataTable() in eine DataTable:
using System;
using System.Data;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
// Recalculate formulas before exporting computed values
workbook.CalculateAllValue();
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(
sheet.AllocatedRange,
true, // exportColumnNames
true // computedFormulaValue
);
// Print each row to verify the exported data
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(string.Join("\t", row.ItemArray));
}
}
finally
{
workbook.Dispose();
}
}
}
Diese Überladung nimmt drei Parameter an:
-
range: der zu exportierende Zellbereich.
sheet.AllocatedRangegibt den verwendeten Bereich des Arbeitsblatts zurück. Abhängig von den Formatierungs- und Einstellungen für den verwendeten Bereich der Arbeitsmappe kann er leere Zellen enthalten. Wenn Sie nur einen bestimmten Datenbereich benötigen, verwenden Sie einen expliziten Bereich und überprüfen Sie dessen Grenzen. -
exportColumnNames: Wenn
true, wird die erste Zeile des Bereichs zu den Spaltennamen derDataTable. Wennfalse, wird die erste Zeile als gewöhnliche Daten exportiert. -
computedFormulaValue: Wenn
true, verwendet der Exporter berechnete Formelwerte anstelle von Formeltext. Wennfalse, werden Formelzellen als ihr Formeltext exportiert. Wenn Ihre Daten Formeln enthalten, überprüfen Sie die exportierten Werte in Ihrer eigenen Testdatei – die Formelberechnung muss möglicherweise vor dem Export ausgelöst werden, damit die Ergebnisse korrekt gefüllt werden.
Um das Ergebnis in einer Windows Forms-Anwendung anzuzeigen, weisen Sie die Tabelle einem DataGridView zu:
dataGridView1.DataSource = dataTable;
Überprüfen Sie die Spaltennamen und Datentypen der exportierten Tabelle anhand Ihrer eigenen Excel-Datei, bevor Sie sich in der späteren Verarbeitung darauf verlassen. Weitere Optionen, z. B. das Exportieren eines bestimmten Bereichs, finden Sie im ausführlichen Tutorial zum Konvertieren von Excel in DataTable in C#.

Formelergebnisse lesen und Zellwerte behandeln
Die Codeausschnitte in diesem Abschnitt gehen davon aus, dass sheet auf ein Arbeitsblatt aus einer geladenen Arbeitsmappe verweist, wie in den vorherigen Beispielen.
Eine Zelle, die eine Formel enthält, hat zwei Dinge, die Sie möglicherweise lesen möchten: die Formel selbst und das Ergebnis, das sie erzeugt. Verwenden Sie HasFormula, um zu prüfen, ob eine Zelle eine Formel enthält, Formula, um den Formeltext abzurufen, und FormulaValue, um das berechnete Ergebnis abzurufen. Wenn Sie aktuelle Formelergebnisse benötigen, rufen Sie workbook.CalculateAllValue() nach dem Laden der Arbeitsmappe und vor dem Lesen von FormulaValue auf.
CellRange cell = sheet.Range["D2"];
if (cell.HasFormula)
{
Console.WriteLine("Formula: " + cell.Formula);
Console.WriteLine("Result: " + cell.FormulaValue);
}
else
{
Console.WriteLine("Value: " + cell.Value);
}
Weitere Informationen zur Arbeit mit Formeln finden Sie unter Formeln und Funktionen in Excel hinzufügen oder lesen.

Zellen mit unterschiedlichen Inhaltstypen können über typisierte Eigenschaften gelesen werden:
CellRange priceCell = sheet.Range["C2"];
CellRange dateCell = sheet.Range["E2"];
double price = priceCell.NumberValue; // numeric value
DateTime date = dateCell.DateTimeValue; // date value
string text = sheet.Range["A2"].Text; // text as displayed
Excel speichert Zahlen und Datumsangaben anders als reinen Text. Wählen Sie daher die Eigenschaft, die zum Datentyp in der Zelle passt.
Zahlenformate und angezeigte Werte lesen
Bei Zellen mit Zahlenformaten – Prozentsätze, Währung, Datumsangaben – können der gespeicherte Wert, der Formatcode und der formatierte Text alle voneinander abweichen. Eine Zelle, die 0.15 mit einem Prozentformat speichert, wird als 15% angezeigt. Verwenden Sie Value für den Rohwert, NumberFormat für den Formatcode und NumberText für den Text, wie er in Excel erscheint:
| Eigenschaft | Rückgabewert |
|---|---|
Value |
Der Rohwert der Zelle |
NumberFormat |
Der Zahlenformatcode (z. B. 0.00%) |
NumberText |
Der Text nach Anwendung des Formats (z. B. 15%) |
CellRange cell = sheet.Range["C2"];
Console.WriteLine("Value: " + cell.Value);
Console.WriteLine("Number format: " + cell.NumberFormat);
Console.WriteLine("Formatted text: " + cell.NumberText);
Wählen Sie die Eigenschaft, die zu den Anforderungen Ihrer nachgelagerten Logik passt: den numerischen Wert für Berechnungen oder den formatierten Text für die Anzeige. Weitere Informationen zu Zahlenformaten finden Sie unter Zahlenformat in Excel festlegen.
Bevor Sie eine Zelle lesen, können Sie prüfen, ob sie leer ist:
if (string.IsNullOrEmpty(sheet.Range["B5"].Value))
{
Console.WriteLine("B5 is empty.");
}
Häufig gestellte Fragen
Kann ich Excel-Dateien in C# lesen, ohne Microsoft Excel zu installieren?
Ja. Free Spire.XLS liest Excel-Dateien direkt und erfordert weder Microsoft Excel noch Interop auf dem Computer oder Server, auf dem Ihr Code ausgeführt wird.
Wie lese ich Formelergebnisse anstelle von Formeln?
Prüfen Sie für eine einzelne Zelle CellRange.HasFormula und lesen Sie CellRange.FormulaValue. Um ein ganzes Arbeitsblatt zu lesen, rufen Sie ExportDataTable() mit computedFormulaValue auf true auf. Siehe Formelergebnisse lesen und Zellwerte behandeln.
Kann ich passwortgeschützte Excel-Dateien lesen?
Ja. Legen Sie das Öffnungspasswort fest, bevor Sie die Datei laden:
Workbook workbook = new Workbook();
workbook.OpenPassword = "your-password";
workbook.LoadFromFile("protected.xlsx");
Welche Excel-Dateiformate unterstützt Free Spire.XLS?
Free Spire.XLS unterstützt die Formate .xls, .xlsx und .xlsm.
Was sind die Einschränkungen der kostenlosen Edition?
Free Spire.XLS for .NET ist eine Community-Edition für persönliche Entwickler und kleine Projekte. Bei der Arbeit mit dem .xls-Format ist jede Arbeitsmappe auf 5 Arbeitsblätter und 200 Zeilen pro Blatt begrenzt. Das Laden und Speichern von .xlsx-Dateien unterliegt diesen Einschränkungen nicht. Für höhere Kapazität oder erweiterte Funktionen ist Spire.XLS for .NET als kommerzielle Edition erhältlich.
Wenn Sie höhere Kapazität oder erweiterte Funktionen benötigen, ist Spire.XLS for .NET die kommerzielle Edition – Sie können eine kostenlose 30-tägige Testlizenz anfordern, um sie zu evaluieren.