Wie man ein Spreadsheet in .NET lädt
Aspose.Cells FOSS for .NET ermöglicht das Öffnen vorhandener XLSX-Tabellen mit einem einzigen Konstruktoraufruf und bietet einen fehlertoleranten Ladevorgang für Dateien, die geringfügige strukturelle Beschädigungen aufweisen. Installieren Sie die Bibliothek über NuGet mit dotnet add package Aspose.Cells_FOSS.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
dotnet add package Aspose.Cells_FOSSÜberprüfen Sie, ob das Paket vorhanden ist:
dotnet list package | grep Aspose.Cells_FOSSSchritt 2: Namespace importieren
Fügen Sie diese Direktive am Anfang Ihrer C#‑Datei hinzu:
using Aspose.Cells_FOSS;Schritt 3: Laden einer XLSX-Datei
Übergeben Sie den Dateipfad an den Workbook‑Konstruktor. Die Bibliothek liest die XLSX‑Datei und füllt das im Speicher befindliche Arbeitsmappen‑Objekt.
using Aspose.Cells_FOSS;
var wb = new Workbook("data.xlsx");
Console.WriteLine("Loaded " + wb.Worksheets.Count + " sheet(s)");
Console.WriteLine("First sheet: " + wb.Worksheets[0].Name);
Console.WriteLine("A1 value: " + wb.Worksheets[0].Cells["A1"].StringValue);Schritt 4: Laden mit fehlertoleranten Reparaturoptionen
Für Dateien, die möglicherweise ZIP- oder XML‑Korruption aufweisen, stellen Sie ein LoadOptions‑Objekt mit TryRepairPackage und TryRepairXml bereit, die auf true gesetzt sind. Wickeln Sie den Aufruf in ein try/catch für WorkbookLoadException ein, falls die Datei nicht wiederherstellbar ist.
using Aspose.Cells_FOSS;
var opts = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("possibly-corrupt.xlsx", opts);
Console.WriteLine("Loaded successfully");
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Unrecoverable file: " + ex.Message);
}Schritt 5: Lade‑Diagnostik prüfen
Nach dem Laden prüfen Sie Workbook.LoadDiagnostics, um zu sehen, ob die Bibliothek Reparaturen durchgeführt hat. HasRepairs ist true, wenn eine Reparatur durchgeführt wurde; HasDataLossRisk ist true, falls Daten verworfen wurden. Durchlaufen Sie Issues, um auf einzelne DiagnosticEntry‑Datensätze zuzugreifen.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
{
Console.WriteLine("Repairs were applied. Data loss risk: " + diag.HasDataLossRisk);
foreach (var entry in diag.Issues)
Console.WriteLine($" [{entry.Severity}] {entry.Code}: {entry.Message}");
}
else
{
Console.WriteLine("File loaded cleanly — no repairs.");
}Schritt 6: Zugriff auf Arbeitsblattdaten
Nach dem Laden greifen Sie über den Index oder den Namen auf Arbeitsblätter zu und lesen Zellwerte mit Cell.StringValue oder Cell.Value.
using Aspose.Cells_FOSS;
var wb = new Workbook("data.xlsx");
// By index
var sheet = wb.Worksheets[0];
Console.WriteLine("Sheet: " + sheet.Name);
Console.WriteLine("A1: " + sheet.Cells["A1"].StringValue);
// By name
var named = wb.Worksheets["Report"];
if (named != null)
Console.WriteLine("Report!B2: " + named.Cells["B2"].StringValue);Häufige Probleme und Lösungen
WorkbookLoadException wird sogar bei aktivierten Reparaturoptionen ausgelöst.
Das bedeutet, dass die ZIP‑Struktur der Datei zu stark beschädigt ist, als dass die Reparatur‑Algorithmen sie wiederherstellen könnten. Überprüfen Sie, ob die Datei ein gültiges ZIP‑Archiv ist (z. B. versuchen Sie unzip -t file.xlsx). Ist die Datei vollständig beschädigt, kann sie von keiner Bibliothek geöffnet werden.
Die geladene Arbeitsmappe hat weniger Arbeitsblätter als erwartet.
Ein Reparaturvorgang könnte Arbeitsblätter entfernt haben, die fehlende Teile referenzierten. Prüfen Sie LoadDiagnostics.Issues auf Einträge mit DataLossRisk = true und benachrichtigen Sie den Benutzer.
Zellwerte sind nach dem Laden leer.
Stellen Sie sicher, dass Sie den richtigen Arbeitsblatt‑Index oder -Namen verwenden. Verwenden Sie wb.Worksheets.Count, um die erwartete Anzahl von Blättern zu bestätigen. Überprüfen Sie außerdem, dass die XLSX‑Datei nicht passwortgeschützt ist (passwortgeschützte Dateien werden derzeit nicht unterstützt).
Workbook Konstruktor hängt bei einer großen Datei.
Der Konstruktor ist synchron und lädt die gesamte Datei in den Speicher. Bei sehr großen Dateien sollte das Laden in einem Hintergrund‑Thread ausgeführt werden, um die UI reaktionsfähig zu halten.
DiagnosticEntry.Severity zeigt Error, aber HasRepairs ist false.HasRepairs gibt an, ob eine Reparatur erfolgreich angewendet wurde, nicht ob Fehler erkannt wurden. Ein Eintrag mit Schweregrad Error und RepairApplied = false bedeutet, dass das Problem erkannt, aber nicht repariert werden konnte — behandeln Sie dies als mögliche Datenintegritätswarnung.
Häufig gestellte Fragen
Kann ich eine XLSX-Datei aus einem Stream statt aus einem Dateipfad laden?
Ja. Der Workbook‑Konstruktor hat Überladungen, die ein Stream‑Objekt akzeptieren. Übergeben Sie Ihren Stream zusammen mit einer LoadOptions‑Instanz, wenn fehlertolerantes Laden erforderlich ist.
Unterstützt die Bibliothek das Laden von passwortgeschützten XLSX-Dateien?
Passwortgeschützte Dateien sind nicht im aktuellen API‑Umfang enthalten. Der Versuch, eine zu laden, führt zu einem WorkbookLoadException.
Wie prüfe ich, welches Blatt im geladenen Arbeitsbuch aktiv ist?
Lese Workbook.Worksheets.ActiveSheetName, um den Namen des Arbeitsblatts zu erhalten, das beim Speichern der Datei zuletzt aktiv war.
Kann ich mehrere XLSX-Dateien gleichzeitig laden?
Ja. Jede Workbook‑Instanz ist unabhängig. Sie können mehrere Workbook‑Objekte in separaten Threads ohne geteilten Zustand instanziieren.
Was passiert, wenn eine Formelzelle geladen wird und das zwischengespeicherte Ergebnis fehlt?
Cell.StringValue gibt einen leeren String zurück. Cell.Formula gibt weiterhin die Formelzeichenkette zurück. Der zwischengespeicherte Wert wird nur gefüllt, wenn Excel (oder eine kompatible Anwendung) die Datei öffnet und speichert.