Werken met OOXML Packaging
Werken met OOXML-verpakking
Een XLSX-bestand is een Open Packaging Convention (OPC) ZIP-archief. Aspose.Cells FOSS voor .NET exposeert de onderliggende pakketlaag via IPackageReader, IPackageWriter en de PackageModel objectgrafiek. Dit zijn low-level API’s bedoeld voor diagnostiek en tooling — de meeste toepassingen gebruiken alleen de high-level Workbook klasse.
Pakketmodel
PackageModel vertegenwoordigt de logische inhoud van een XLSX-archief. Het biedt drie collecties: Parts (alle inhoudsdelen), Relationships (OPC-relatie-items), en UnsupportedParts (delen die aanwezig zijn in het bestand maar die de bibliotheek niet verwerkt). Elk deel wordt beschreven door een PackagePartDescriptor met PartUri, ContentType en Category.
using Aspose.Cells_FOSS;
// PackageModel is accessed via PackageLoadContext during custom load flows
// The following illustrates the object structure
// var context = new PackageLoadContext(workbook, packageModel);
// var model = context.Package;
// foreach (var part in model.Parts)
// {
// Console.WriteLine($"URI={part.PartUri}, Type={part.ContentType}");
// }
// Console.WriteLine("Unsupported parts: " + model.UnsupportedParts.Count);Note:
PackageModelwordt intern gevuld bij het laden van een XLSX-bestand. Directe instantiering maakt geen deel uit van de standaard high-level workflow.
IPackageReader en IPackageWriter
IPackageReader definieert een enkele Read()-methode voor het lezen van een OPC-pakket. IPackageWriter definieert een enkele Write()-methode voor het schrijven ervan. Deze interfaces worden geïmplementeerd door de interne ZIP-gebaseerde lezer/schrijver van de bibliotheek en kunnen worden geleverd door aangepaste implementaties voor in-memory- of cloud-storage-scenario’s.
// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }PackageStructureException
PackageStructureException wordt gegooid wanneer de XLSX-pakketstructuur fundamenteel ongeldig is — bijvoorbeeld wanneer verplichte OPC-relaties ontbreken. Het breidt de algemene exceptiehiërarchie uit en bevat een bericht dat beschrijft welke structurele invariant is geschonden.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("bad.xlsx", opts);
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}Tips en best practices
- Gebruik
PackageModel.UnsupportedPartsom niet-standaardonderdelen te ontdekken die stilzwijgend kunnen worden weggelaten bij een round-trip. - Vang
PackageStructureExceptionop naastWorkbookLoadExceptionbij het laden van bestanden uit onbetrouwbare bronnen. - De
IPackageReader/IPackageWriterinterfaces zijn uitbreidingspunten; implementeer ze alleen wanneer je aangepaste opslag nodig hebt (bijv. laden vanuit een cloud-blob zonder lokaal bestand). - Voor de meeste diagnostiek is
LoadDiagnostics(toegankelijk viaWorkbook.LoadDiagnostics) voldoende — dalen naar de pakkellaag is zelden nodig.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
PackageStructureException bij laden | Vereiste OPC-relatie ontbreekt | Stel TryRepairPackage = true in LoadOptions; controleer LoadDiagnostics.Issues na het laden |
UnsupportedParts niet leeg | Bestand bevat niet-standaard extensies | Deze onderdelen worden bij het opslaan letterlijk behouden als ze bij het laden aanwezig waren |
Aangepaste IPackageReader niet aangeroepen | Doorgestuurd naar verkeerde constructoroverload | Zorg ervoor dat de LoadOptions of constructoroverload die de aangepaste lezer accepteert wordt gebruikt |
FAQ
Moet ik IPackageReader/IPackageWriter gebruiken voor normaal spreadsheetwerk?
Nee. Deze interfaces zijn extensiepunten voor geavanceerde scenario’s. Alle standaard lees-/schrijfbewerkingen gaan rechtstreeks via Workbook.
Worden niet-ondersteunde delen bewaard bij opslaan?
Delen die in PackageModel.UnsupportedParts staan, worden niet verwerkt en kunnen mogelijk niet worden weggeschreven. Als round-trip-fidelity voor niet-standaarddelen vereist is, gebruik dan een post-processingstap op zip-niveau.
Wat is het verschil tussen PackageStructureException en WorkbookLoadException?
PackageStructureException duidt op een OPC/ZIP-niveau fout (ontbrekend contenttype, verbroken relatie). WorkbookLoadException duidt op een fout op hoger niveau bij het parsen of semantisch falen van de XLSX-inhoud.
API Reference Samenvatting
| Klasse / Interface | Beschrijving |
|---|---|
IPackageReader | Interface voor het lezen van een OPC-pakket (Read methode) |
IPackageWriter | Interface voor het schrijven van een OPC-pakket (Write methode) |
PackageLoadContext | Bindt een Workbook aan zijn PackageModel |
PackageLoadContext.Package | Retourneert de PackageModel |
PackageModel.Parts | Alle inhoudsdelen in het pakket |
PackageModel.Relationships | OPC-relatievermeldingen |
PackageModel.UnsupportedParts | Onderdelen die niet door de bibliotheek worden verwerkt |
PackagePartDescriptor.PartUri | OPC-URI voor het onderdeel |
PackagePartDescriptor.ContentType | MIME-inhoudstype van het onderdeel |
PackagePartDescriptor.Category | Logische categorie (werkblad, stijlen, enz.) |
PackageStructureException | Wordt gegooid bij OPC-structurele overtredingen |