Hur man arbetar med OOXML-paketering i .NET

Hur man arbetar med OOXML-paketering i .NET

En XLSX-fil är ett Open Packaging Convention (OPC) ZIP‑arkiv. Aspose.Cells FOSS for .NET exponerar den underliggande paketstrukturen via PackageModel, PackagePartDescriptor, IPackageReader och IPackageWriter. Dessa är infrastruktur‑nivå‑API:er som främst är användbara för diagnostik och anpassade lagringsimplementationer. Installera med dotnet add package Aspose.Cells_FOSS.

Steg-för-steg-guide

Steg 1: Installera paketet

dotnet add package Aspose.Cells_FOSS

Steg 2: Importera namnrymden

using Aspose.Cells_FOSS;

Steg 3: Hantera PackageStructureException

PackageStructureException kastas när XLSX‑paketet har en ogiltig OPC‑struktur (t.ex. saknade obligatoriska relationer). Fånga den tillsammans med WorkbookLoadException när du laddar filer från opålitliga källor.

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: Förstå IPackageReader och IPackageWriter

IPackageReader definierar en Read()‑metod för att läsa ett OPC‑paket; IPackageWriter definierar en Write()‑metod för att skriva ett sådant. Biblioteket tillhandahåller standard‑ZIP‑baserade implementationer. Anpassade implementationer kan tillhandahållas vid inläsning från eller sparande till icke‑fil‑systemlagring (t.ex. moln‑blobs eller minnesbuffertar).

// 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: Kontrollera för ej stödda delar

När du laddar en XLSX-fil listar PackageModel.UnsupportedParts delar som biblioteket inte bearbetar. Dessa bevaras men tolkas inte. Få åtkomst till PackageLoadContext under ett anpassat laddningsflöde för att inspektera 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.");

Vanliga problem och lösningar

PackageStructureException kastas även med TryRepairPackage = true. Vissa OPC‑strukturella fel ligger utanför automatisk reparation (t.ex. helt saknad content‑type‑karta). Verifiera att filen är en giltig ZIP med unzip -t file.xlsx. Om den är giltig kan den vara krypterad — lösenordsskyddade filer stöds inte.

Workbook laddas men viss innehåll saknas. Kontrollera LoadDiagnostics.Issues för DataLossRisk = true poster. Dessa indikerar delar som föll bort under reparation.

Custom IPackageReader anropas inte. Se till att den konstruktoröverladdning som accepterar den anpassade läsaren används. Inte alla Workbook-konstruktoröverladdningar accepterar en anpassad paketläsare.

Vanliga frågor

När bör jag implementera IPackageReader eller IPackageWriter?

Endast när din lagringsbackend inte är det lokala filsystemet — till exempel genom att läsa direkt från en molnlagringsström utan att skapa en temporär fil.

Behålls osupporterade delar i PackageModel vid sparning?

Icke‑standarddelar i UnsupportedParts garanteras inte att skrivas tillbaka. För att bevara rundresans noggrannhet för icke‑standarddelar, efterbehandla den sparade XLSX‑filen på ZIP‑nivå.

Vad är skillnaden mellan PackageStructureException och WorkbookLoadException?

PackageStructureException är ett OPC/ZIP‑nivåfel (saknad innehållstyp, trasig relation). WorkbookLoadException är ett fel på högre nivå vid parsning av XLSX XML‑innehållet.

Se även

 Svenska