Ako pracovať s OOXML balíčkovaním v .NET
XLSX súbor je Open Packaging Convention (OPC) ZIP archív. Aspose.Cells FOSS for .NET odhaľuje podkladovú štruktúru balíka prostredníctvom PackageModel, PackagePartDescriptor, IPackageReader a IPackageWriter. Ide o infraštruktúrne API, ktoré sú predovšetkým užitočné pre diagnostiku a vlastné implementácie úložiska. Inštalujte pomocou dotnet add package Aspose.Cells_FOSS.
Sprievodca krok za krokom
Krok 1: Nainštalovať balík
dotnet add package Aspose.Cells_FOSSKrok 2: Importovať menný priestor
using Aspose.Cells_FOSS;Krok 3: Ošetriť PackageStructureException
PackageStructureException je vyvolaná, keď má balík XLSX neplatnú štruktúru OPC (napr. chýbajúce povinné vzťahy). Zachyťte ju spolu s WorkbookLoadException pri načítavaní súborov z nedôveryhodných zdrojov.
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);
}Krok 4: Pochopiť IPackageReader a IPackageWriter
IPackageReader definuje Read() metódu na čítanie OPC balíka; IPackageWriter definuje Write() metódu na zápis. Knižnica poskytuje predvolené implementácie založené na ZIP. Vlastné implementácie je možné dodať pri načítavaní alebo ukladaní do úložiska mimo súborového systému (napr. cloudové bloby alebo pamäťové buffery).
// 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)");Krok 5: Skontrolujte nepodporované časti
Pri načítavaní súboru XLSX PackageModel.UnsupportedParts uvádza časti, ktoré knižnica nespracováva. Tieto sú zachované, ale nie sú interpretované. Prístup PackageLoadContext počas vlastného toku načítania na kontrolu modelu.
// 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.");Bežné problémy a riešenia
PackageStructureException sa vyhodí aj pri TryRepairPackage = true.
Niektoré štrukturálne chyby OPC sú mimo automatickej opravy (napr. úplne chýbajúca mapa content-type). Overte, či je súbor platný ZIP pomocou unzip -t file.xlsx. Ak je platný, môže byť šifrovaný — súbory chránené heslom nie sú podporované.
Workbook načítava, ale niektorý obsah chýba.
Skontrolujte LoadDiagnostics.Issues pre DataLossRisk = true položky. Tieto naznačujú časti, ktoré boli počas opravy vynechané.
Vlastný IPackageReader sa nevolá.
Uistite sa, že sa použije preťaženie konštruktora, ktoré akceptuje vlastného čitateľa. Nie všetky preťaženia konštruktora Workbook akceptujú vlastného čitateľa balíka.
Často kladené otázky
Kedy by som mal implementovať IPackageReader alebo IPackageWriter?
Len keď nie je váš úložný backend lokálnym súborovým systémom — napríklad pri načítaní priamo z prúdu cloudového úložiska bez vytvorenia dočasného súboru.
Sú nepodporované časti v PackageModel zachované pri uložení?
Neštandardné časti v UnsupportedParts nie sú zaručené, že budú zapísané späť. Pre zachovanie vernosti pri obojsmernom prevode neštandardných častí je potrebné po uložení XLSX vykonať postproces na úrovni ZIP.
Aký je rozdiel medzi PackageStructureException a WorkbookLoadException?
PackageStructureException je zlyhanie na úrovni OPC/ZIP (chýbajúci typ obsahu, poškodený vzťah). WorkbookLoadException je zlyhanie na vyššej úrovni pri parsovaní XML obsahu XLSX.