Wie man mit OOXML-Verpackungen in .NET arbeitet

Wie man mit OOXML-Verpackungen in .NET arbeitet

Eine XLSX-Datei ist ein Open Packaging Convention (OPC) ZIP-Archiv. Aspose.Cells FOSS für .NET zeigt die zugrunde liegende Paketstruktur durch PackageModel, PackagePartDescriptor, IPackageReader,und . IPackageWriter.Es handelt sich um APIs auf Infrastrukturebene, die hauptsächlich für Diagnostik und benutzerdefinierte Speicherimplementierungen nützlich sind. Installieren Sie mit dotnet add package Aspose.Cells_FOSS.

Schritt für Schritte

Schritt 1: Installieren des Pakets

dotnet add package Aspose.Cells_FOSS

Schritt 2: Importieren des Namensraums

using Aspose.Cells_FOSS;

Schritt 3: Verwalten von Paketstruktur-Ausnahme

PackageStructureException wird geworfen, wenn das XLSX-Paket eine ungültige OPC-Struktur aufweist (z. B. fehlende erforderliche Beziehungen). WorkbookLoadException beim Laden von Dateien aus unzuverlässigen Quellen.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairPackage = true };

try
{
    var wb = new Workbook("suspect.xlsx", opts);
    Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (PackageStructureException ex)
{
    Console.WriteLine("OPC structure invalid: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load error: " + ex.Message);
}

Schritt 4: Verstehen von IPackageReader und IP ackagebriefgerät

IPackageReader Definition einer Read() Methode zum Lesen einer OPC-Verpackung; IPackageWriter Definition einer Write() Die Bibliothek bietet Standard-ZIP-gestützte Implementierungen. Benutzerdefinierte Implementationen können beim Laden von oder beim Speichern in einen nicht Dateisystemspeicher (z. B. Cloudblobs oder In-Memory Buffers) bereitgestellt werden.

// Signature reference
// public interface IPackageReader { void Read(/* ... */); }
// public interface IPackageWriter { void Write(/* ... */); }
//
// Standard usage: pass a Stream to the Workbook constructor
using Aspose.Cells_FOSS;
using System.IO;

byte[] fileBytes = File.ReadAllBytes("data.xlsx");
using var ms = new MemoryStream(fileBytes);
var wb = new Workbook(ms);
Console.WriteLine("Loaded from stream: " + wb.Worksheets.Count + " sheet(s)");

Schritt 5: Nachweisen, ob keine Teile unterstützt werden können

Beim Laden einer XLSX-Datei, PackageModel.UnsupportedParts Diese werden erhalten, aber nicht interpretiert. Access PackageLoadContext während eines maßgeschneiderten Lastflusses, um das Modell zu prüfen.

// PackageModel is populated internally during Workbook construction.
// Use LoadDiagnostics to detect load-time structural warnings without
// dropping to the PackageModel level directly.
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("Package had " + diag.Issues.Count() + " repair entries.");

Häufige Probleme und Lösungen

PackageStructureException wird sogar mit TryRepairPackage = true. Einige strukturelle Fehler des OPC sind nicht automatisch zu reparieren (z. B. fehlt eine vollständige Inhaltskarte). Überprüfen Sie, ob die Datei ein gültiger ZIP-Zugang ist mit: unzip -t file.xlsx.Wenn gültig, kann es verschlüsselt sein Passwortgeschützte Dateien werden nicht unterstützt.

Workbook Die Kommission hat die Anträge des Europäischen Parlaments angenommen. Überprüfung LoadDiagnostics.Issues für die DataLossRisk = true Diese Angaben zeigen Teile an, die während der Reparatur fallen fielen.

Zoll IPackageReader wird nicht gerufen. Stellen Sie sicher, dass die Konstruktorüberlastung verwendet wird, die den benutzerdefinierten Leser akzeptiert. Nicht alle Workbook Konstruktorüberlastungen akzeptieren einen benutzerdefinierten Paketleser.

Häufig gestellte Fragen

Wann sollte ich IPackageReader oder IP ackagebruch implementieren?

Nur wenn Ihr Speicher-Backend nicht das lokale Dateisystem ist zum Beispiel, direkt aus einem Cloud-Speichersystem geladen ohne eine temporäre Datei zu erstellen.

Sind nicht unterstützte Teile im PackageModel auf Speicher gespeichert?

Nicht-standardisierte Teile in UnsupportedParts Für die Rundfahrt-Fidelität von nicht standardmäßigen Teilen wird das gespeicherte XLSX auf ZIP-Ebene nachverarbeitet.

Was ist der Unterschied zwischen PackageStructureException und WorkbookLoadExcept?

PackageStructureException ist ein Fehler auf der OPC/ZIP-Ebene (fehlende Inhaltsart, gebrochene Beziehung). WorkbookLoadException ist ein Fehler auf höherer Ebene bei der Analyse des XLSX-XML-Inhalts.

Siehe auch:

 Deutsch