Kaip dirbti su OOXML pakavimu .NET
XLSX failas yra Open Packaging Convention (OPC) ZIP archyvas. Aspose.Cells FOSS for .NET atskleidžia pagrindinę paketo struktūrą per PackageModel, PackagePartDescriptor, IPackageReader ir IPackageWriter. Tai infrastruktūros lygio API, daugiausia naudingi diagnostikai ir pasirinktinių saugojimo įgyvendinimams. Įdiekite naudodami dotnet add package Aspose.Cells_FOSS.
Žingsnis po žingsnio vadovas
Žingsnis 1: Įdiekite paketą
dotnet add package Aspose.Cells_FOSS2 žingsnis: importuoti vardų sritį
using Aspose.Cells_FOSS;3 žingsnis: Apdoroti PackageStructureException
PackageStructureException išmetamas, kai XLSX paketas turi neteisingą OPC struktūrą (pvz., trūksta reikiamų ryšių). Sugriebkite jį kartu su WorkbookLoadException įkeliant failus iš nepatikimų šaltinių.
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);
}Žingsnis 4: Suprasti IPackageReader ir IPackageWriter
IPackageReader apibrėžia Read() metodą OPC paketo skaitymui; IPackageWriter apibrėžia Write() metodą jo rašymui. Biblioteka teikia numatytąsias ZIP pagrindu veikiančias realizacijas. Individualios realizacijos gali būti pateiktos įkeliant iš arba saugant į ne failų sistemos saugyklą (pvz., debesų objektus arba atminties buferius).
// 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)");Žingsnis 5: Patikrinkite nepalaikomas dalis
Įkeliant XLSX failą, PackageModel.UnsupportedParts išrašo dalis, kurių biblioteka neapdoroja. Jos išsaugomos, bet neinterpretuojamos. Prieiga PackageLoadContext per pasirinktą įkėlimo eigą, kad patikrintumėte modelį.
// 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.");Dažnos problemos ir sprendimai
PackageStructureException išmetamas net su TryRepairPackage = true.
Kai kurie OPC struktūriniai gedimai yra nepakeliami automatiškai (pvz., visiškai trūksta content-type žemėlapio). Patikrinkite, ar failas yra galiojantis ZIP su unzip -t file.xlsx. Jei galiojantis, jis gali būti užšifruotas — slaptažodžiu apsaugoti failai nepalaikomi.
Workbook įkelia, bet trūksta kai kurios turinio dalies.
Patikrinkite LoadDiagnostics.Issues dėl DataLossRisk = true įrašų. Tai rodo dalis, kurios buvo pašalintos taisymo metu.
Custom IPackageReader nėra iškviečiamas.
Užtikrinkite, kad būtų naudojamas konstruktoriaus perkrovimas, priimantis pasirinktą skaitytoją. Ne visi Workbook konstruktoriaus perkrovimai priima pasirinktą paketų skaitytoją.
Dažniausiai užduodami klausimai
Kada turėčiau įgyvendinti IPackageReader arba IPackageWriter?
Tik tada, kai jūsų saugojimo posistemė nėra vietinė failų sistema — pavyzdžiui, įkeliant tiesiogiai iš debesų saugojimo srauto be laikino failo sukūrimo.
Ar nepalaikomos dalys PackageModel išsaugojimo metu išlieka?
Nestandartinės dalys UnsupportedParts nėra garantuota, kad būtų įrašytos atgal. Norint išlaikyti nepakartojamą (round‑trip) tikslumą nepakartojamų dalių, po įrašymo apdorokite išsaugotą XLSX ZIP lygyje.
Kuo skiriasi PackageStructureException ir WorkbookLoadException?
PackageStructureException yra OPC/ZIP lygio klaida (trūksta turinio tipo, sugadintas ryšys). WorkbookLoadException yra aukštesnio lygio klaida analizuojant XLSX XML turinį.