Slik jobber du med OOXML-pakking i .NET

Slik jobber du med OOXML-pakking i .NET

En XLSX‑fil er et Open Packaging Convention (OPC) ZIP‑arkiv. Aspose.Cells FOSS for .NET eksponerer den underliggende pakkestrukturen gjennom PackageModel, PackagePartDescriptor, IPackageReader og IPackageWriter. Dette er infrastruktur‑nivå API‑er som hovedsakelig er nyttige for diagnostikk og tilpassede lagringsimplementasjoner. Installer med dotnet add package Aspose.Cells_FOSS.

Steg-for-steg guide

Steg 1: Installer pakken

dotnet add package Aspose.Cells_FOSS

Steg 2: Importer navnerommet

using Aspose.Cells_FOSS;

Steg 3: Håndter PackageStructureException

PackageStructureException kastes når XLSX‑pakken har en ugyldig OPC‑struktur (f.eks. manglende påkrevde relasjoner). Fang den sammen med WorkbookLoadException når du laster inn filer fra upålitelige 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);
}

Steg 4: Forstå IPackageReader og IPackageWriter

IPackageReader definerer en Read()‑metode for å lese en OPC‑pakke; IPackageWriter definerer en Write()‑metode for å skrive en. Biblioteket leverer standard ZIP‑baserte implementasjoner. Tilpassede implementasjoner kan leveres når du laster inn fra eller lagrer til lagring uten filsystem (f.eks. sky‑blobs eller minne‑buffere).

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

Steg 5: Sjekk for ikke‑støttede deler

Når du laster en XLSX-fil, lister PackageModel.UnsupportedParts opp deler som biblioteket ikke behandler. Disse blir bevart, men ikke tolket. Få tilgang til PackageLoadContext under en tilpasset lastestrøm for å inspisere 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.");

Vanlige problemer og løsninger

PackageStructureException kastes selv med TryRepairPackage = true.
Noen OPC‑strukturelle feil er utenfor automatisk reparasjon (f.eks. helt manglende content‑type‑kart). Verifiser at filen er en gyldig ZIP med unzip -t file.xlsx. Hvis den er gyldig, kan den være kryptert — passordbeskyttede filer støttes ikke.

Workbook laster, men noe innhold mangler.
Sjekk LoadDiagnostics.Issues for DataLossRisk = true oppføringer. Disse indikerer deler som ble droppet under reparasjon.

Custom IPackageReader blir ikke kalt. Sørg for at konstruktøroverlasting som godtar den tilpassede leseren blir brukt. Ikke alle Workbook‑konstruktøroverlastinger godtar en tilpasset pakkeleser.

Ofte stilte spørsmål

Når bør jeg implementere IPackageReader eller IPackageWriter?

Kun når lagrings‑backend‑en din ikke er det lokale filsystemet — for eksempel ved å laste direkte fra en sky‑lagringsstrøm uten å opprette en midlertidig fil.

Er ikke‑støttede deler i PackageModel bevart ved lagring?

Ikke‑standard deler i UnsupportedParts er ikke garantert å bli skrevet tilbake. For rundreise‑nøyaktighet av ikke‑standard deler, etterbehandle den lagrede XLSX‑filen på ZIP‑nivå.

Hva er forskjellen mellom PackageStructureException og WorkbookLoadException?

PackageStructureException er en OPC/ZIP‑nivåfeil (manglende innholdstype, ødelagt relasjon). WorkbookLoadException er en feil på høyere nivå ved parsing av XLSX XML‑innholdet.

Se også

 Norsk