Sådan arbejder du med OOXML-pakning i .NET

Sådan arbejder du med OOXML-pakning i .NET

En XLSX‑fil er et Open Packaging Convention (OPC) ZIP‑arkiv. Aspose.Cells FOSS for .NET eksponerer den underliggende pakkestruktur gennem PackageModel, PackagePartDescriptor, IPackageReader og IPackageWriter. Disse er infrastruktur‑niveau API’er, der primært er nyttige til diagnostik og brugerdefinerede lagringsimplementeringer. Installer med dotnet add package Aspose.Cells_FOSS.

Trin-for-trin guide

Trin 1: Installer pakken

dotnet add package Aspose.Cells_FOSS

Trin 2: Importer navnerummet

using Aspose.Cells_FOSS;

Trin 3: Håndter PackageStructureException

PackageStructureException kastes, når XLSX-pakken har en ugyldig OPC-struktur (f.eks. manglende påkrævede relationer). Fang den sammen med WorkbookLoadException, når du indlæser filer fra ikke‑betroede kilder.

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);
}

Trin 4: Forstå IPackageReader og IPackageWriter

IPackageReader definerer en Read() metode til at læse en OPC-pakke; IPackageWriter definerer en Write() metode til at skrive en sådan. Biblioteket leverer standard ZIP‑baserede implementeringer. Tilpassede implementeringer kan leveres, når der indlæses fra eller gemmes til lager uden filsystem (f.eks. cloud‑blobs eller hukommelsesbuffere).

// 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)");

Trin 5: Kontroller for ikke‑understøttede dele

Når du indlæser en XLSX‑fil, viser PackageModel.UnsupportedParts dele, som biblioteket ikke behandler. Disse bevares, men fortolkes ikke. Få adgang til PackageLoadContext under en brugerdefineret indlæsnings‑flow for at inspicere modellen.

// 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.");

Almindelige problemer og løsninger

PackageStructureException udløses selv med TryRepairPackage = true.
Nogle OPC‑strukturelle fejl ligger uden for automatisk reparation (f.eks. fuldstændig manglende content‑type‑kort). Verificér, at filen er en gyldig ZIP med unzip -t file.xlsx. Hvis den er gyldig, kan den være krypteret — adgangskodebeskyttede filer understøttes ikke.

Workbook indlæses, men noget indhold mangler. Tjek LoadDiagnostics.Issues for DataLossRisk = true poster. Disse indikerer dele, der blev droppet under reparation.

Custom IPackageReader bliver ikke kaldt.
Sørg for, at den konstruktøroverbelastning, der accepterer den brugerdefinerede læser, anvendes. Ikke alle Workbook konstruktøroverbelastninger accepterer en brugerdefineret pakke‑læser.

Ofte stillede spørgsmål

Hvornår skal jeg implementere IPackageReader eller IPackageWriter?

Kun når din lagringsbackend ikke er det lokale filsystem — for eksempel ved at indlæse direkte fra en cloud‑lagringsstrøm uden at oprette en midlertidig fil.

Er ikke‑understøttede dele i PackageModel bevaret ved gem?

Ikke-standard dele i UnsupportedParts er ikke garanteret at blive skrevet tilbage. For rundrejse‑fidelitet af ikke-standard dele, efterbehandl den gemte XLSX på ZIP‑niveau.

Hvad er forskellen mellem PackageStructureException og WorkbookLoadException?

PackageStructureException er en OPC/ZIP‑niveau fejl (manglende indholdstype, brudt relation). WorkbookLoadException er en fejl på højere niveau ved parsing af XLSX XML‑indholdet.

Se også

 Dansk