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_FOSSSteg 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.