Kaip dirbti su OOXML pakavimu .NET

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_FOSS

2 ž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į.

Žr. taip pat

 Lietuvių