Kako raditi sa OOXML pakovanjem u .NET

Kako raditi sa OOXML pakovanjem u .NET

XLSX fajl je ZIP arhiva po Open Packaging Convention (OPC) standardu. Aspose.Cells FOSS for .NET izlaže osnovnu strukturu paketa kroz PackageModel, PackagePartDescriptor, IPackageReader i IPackageWriter. Ovo su API‑ji na nivou infrastrukture, prvenstveno korisni za dijagnostiku i prilagođene implementacije skladištenja. Instalirajte pomoću dotnet add package Aspose.Cells_FOSS.

Vodič korak po korak

Korak 1: Instalirajte paket

dotnet add package Aspose.Cells_FOSS

Korak 2: Uvezi prostor imena

using Aspose.Cells_FOSS;

Korak 3: Rukovanje PackageStructureException

PackageStructureException se baca kada XLSX paket ima neispravnu OPC strukturu (npr. nedostaju potrebni odnosi). Uhvatite ga zajedno sa WorkbookLoadException prilikom učitavanja fajlova iz nepouzdanih izvora.

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);
}

Korak 4: Razumevanje IPackageReader i IPackageWriter

IPackageReader definiše Read() metodu za čitanje OPC paketa; IPackageWriter definiše Write() metodu za njegovo pisanje. Biblioteka pruža podrazumevane implementacije zasnovane na ZIP‑u. Prilagođene implementacije mogu biti dostavljene prilikom učitavanja iz ili čuvanja u skladište koje nije fajl‑sistem (npr. cloud blob‑ovi ili memorijski baferi).

// 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)");

Korak 5: Proveri nepodržane delove

Pri učitavanju XLSX fajla, PackageModel.UnsupportedParts navodi delove koje biblioteka ne obrađuje. Oni se čuvaju, ali se ne interpretiraju. Pristupite PackageLoadContext tokom prilagođenog toka učitavanja da biste pregledali 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.");

Уобичајени проблеми и решења

PackageStructureException се баца чак и са TryRepairPackage = true.
Неки OPC структурни пропусти су изван аутоматског поправљања (нпр. потпуно недостаје мапа content-type). Проверите да ли је датотека важећи ZIP са unzip -t file.xlsx. Ако је важећа, може бити шифрована — датотеке заштићене лозинком нису подржане.

Workbook učitava, ali neki sadržaj nedostaje. Proverite LoadDiagnostics.Issues za DataLossRisk = true unose. Ovo ukazuje na delove koji su izostavljeni tokom popravke.

Custom IPackageReader nije pozvan. Osigurajte da se koristi preopterećenje konstruktora koje prihvata prilagođeni čitač. Nisu sva preopterećenja konstruktora Workbook kompatibilna sa prilagođenim čitačem paketa.

Često postavljana pitanja

Kada treba da implementiram IPackageReader ili IPackageWriter?

Samo kada vaš backend za skladištenje nije lokalni fajl sistem — na primer, učitavanje direktno iz cloud skladišnog toka bez kreiranja privremenog fajla.

Da li se nepodržani delovi u PackageModel čuvaju prilikom spremanja?

Nekstandardni delovi u UnsupportedParts nisu garantovani da će biti upisani nazad. Za očuvanje tačnosti pri povratnom prevozu nekstandardnih delova, izvršite post‑procesiranje sačuvanog XLSX‑a na ZIP nivou.

Koja je razlika između PackageStructureException i WorkbookLoadException?

PackageStructureException је неуспех на нивоу OPC/ZIP (недостаје тип садржаја, оштећен однос). WorkbookLoadException је неуспех вишег нивоа при парсирању XLSX XML садржаја.

Види такође

 Српски