Treballar amb OOXML Packaging
Treballar amb OOXML Packaging
Un fitxer XLSX és un arxiu ZIP de la Convenció d’Embalage obert (OPC). Aspose.Cells FOSS per a .NET exposa l’estratègia subjacent del paquet mitjançant: IPackageReader, IPackageWriter, i el PackageModel object graph. Aquestes són API de baix nivell destinades a diagnòstics i ferramentas la majoria d’aplicacions utilitzen només el tipus de l’API de alt nivell Workbook classe.
Modell de paquet
PackageModel representa el contingut lògic d’un arxiu XLSX. Exposeix tres col·leccions: Parts (totes les parts de contingut), Relationships (Entrades de relació amb la OPC) i UnsupportedParts Cada part és descrita per un document de la biblioteca. PackagePartDescriptor amb: PartUri, ContentType, i 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);Nota::
PackageModelLa instància directa no forma part del flux de treball estàndard d’alt nivell.
IPpackageReader i IPackagewriter
IPackageReader defineix un sol Read() mètode per llegir un paquet OPC. IPackageWriter defineix un sol Write() Aquestes interfícies són implementades pel lector / escriptor intern basat en ZIP de la biblioteca i poden ser subministrats per implementacions personalitzades per a escenaris d’emmagatzematge o emmagatzemament en el núvol.
// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }PackageStructureException
PackageStructureException s’emprèn quan l’estructura del paquet XLSX és fonamentalment invàlida per exemple, quan no hi ha relacions OPC requeres. Extensa la jerarquia d’excepció general i porta un missatge que descriu quin invariant estructural va ser violat.
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);
}Consells i millors pràctiques
- Utilització:
PackageModel.UnsupportedPartsPer descobrir parts no estàndard que poden ser deixades en silenci durant el viatge d’anar i venir. - Captura
PackageStructureExceptiona més de:WorkbookLoadExceptionquan es carguen arxius de fonts no fiables. - El
IPackageReader/IPackageWriterles interfícies són punts d’extensió; implementa-les només quan necessites un emmagatzematge personalitzat (per exemple, carregament des dun blob de núvol sense un fitxer local). - Per a la majoria dels diagnòstics,
LoadDiagnostics(accessible a través de:Workbook.LoadDiagnostics) és suficient rarament cal deixar-ho en la capa de paquet.
Problemàtiques comuns
| Edició | Causa | Correcció |
|---|---|---|
PackageStructureException en càrrega | No hi ha relació OPC requerida | Set de punts TryRepairPackage = true en el LoadOptions; comprovar LoadDiagnostics.Issues després de la càrrega. |
UnsupportedParts no buida. | Arxiu que conté extensions no estàndard | Aquestes parts es conserven literalment en l’excepció si estaven presents a la càrrega. |
Costum IPackageReader No invocat. | Passat a la sobrecarrega del constructor equivocat. | Assegurar la LoadOptions o s’utilitza sobrecarga de constructor que accepta el lector personalitzat |
FAQ
He de fer servir IPackageReader/IPackerWriter per a la seva feina normal?
No. Aquestes interfícies són punts d’extensió per a escenaris avançats. Totes les operacions estàndard de lectura/escriptura passen pel sistema de correcció del diagrama. Workbook directament.
Les parts no suportades es conserven en salvament?
Partes enumerades en: PackageModel.UnsupportedParts Si es requereix fidelitat d’anar i venir per a peces no estàndard, s’utilitza un pas de post-elaboració al nivell del zip.
Quina és la diferència entre PackageStructureException i WorkbookLoadExcept?
PackageStructureException indica un error a nivell OPC/ZIP (tipus de contingut mancant, relació trencada). WorkbookLoadException indica un error d’anàlisi o semàntic de nivell superior en el contingut XLSX.
Resum de referència d’API
| Classe / Interfície | Descripció |
|---|---|
IPackageReader | Interfície per a la lectura d’un paquet OPC (Read mètode) |
IPackageWriter | Interfície per a escriure un paquet OPC (Write mètode) |
PackageLoadContext | Enllaços a Workbook a la seva PackageModel |
PackageLoadContext.Package | Retorna el nombre de punts. PackageModel |
PackageModel.Parts | Tots els elements del paquet |
PackageModel.Relationships | Entrades de relació amb la OPC |
PackageModel.UnsupportedParts | Partes no tractades per la biblioteca |
PackagePartDescriptor.PartUri | URI de la part OPC |
PackagePartDescriptor.ContentType | Tipus de contingut MIME de la part |
PackagePartDescriptor.Category | Categoria lògica (folla de treball, estils, etc.) |
PackageStructureException | Arrossegada a violacions estructurals de la OPC |