Kako raditi s OOXML pakiranjem u .NET

Kako raditi s OOXML pakiranjem u .NET

XLSX datoteka je ZIP arhiva prema Open Packaging Convention (OPC). Aspose.Cells FOSS for .NET izlaže temeljnu strukturu paketa putem PackageModel, PackagePartDescriptor, IPackageReader i IPackageWriter. To su API‑ji na razini infrastrukture, prvenstveno korisni za dijagnostiku i prilagođene implementacije pohrane. 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 s WorkbookLoadException pri učitavanju datoteka 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: Razumjeti IPackageReader i IPackageWriter

IPackageReader definira Read() metodu za čitanje OPC paketa; IPackageWriter definira Write() metodu za pisanje istog. Biblioteka pruža zadane implementacije temeljene na ZIP‑u. Prilagođene implementacije mogu se dostaviti prilikom učitavanja iz ili spremanja u pohranu izvan datotečnog sustava (npr. oblačne blobove ili memorijske međuspremnike).

// 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: Provjeri nepodržane dijelove

Pri učitavanju XLSX datoteke, PackageModel.UnsupportedParts navodi dijelove koje biblioteka ne obrađuje. Ti se dijelovi čuvaju, ali se ne interpretiraju. Pristupite PackageLoadContext tijekom prilagođenog toka učitavanja kako 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.");

Uobičajeni problemi i rješenja

PackageStructureException se baca čak i uz TryRepairPackage = true.
Neki OPC strukturni kvarovi su izvan automatskog popravka (npr. potpuno nedostaje mapa content‑type). Provjerite je li datoteka valjani ZIP pomoću unzip -t file.xlsx. Ako je valjana, može biti šifrirana — datoteke zaštićene lozinkom nisu podržane.

Workbook učitava, ali neki sadržaj nedostaje. Provjerite LoadDiagnostics.Issues za DataLossRisk = true unose. Ovo označava dijelove koji su izostavljeni tijekom popravka.

Prilagođeni IPackageReader nije pozvan. Osigurajte da se koristi preopterećenje konstruktora koje prihvaća prilagođeni čitač. Nisu sva preopterećenja konstruktora Workbook kompatibilna s prilagođenim čitačem paketa.

Često postavljana pitanja

Kada trebam implementirati IPackageReader ili IPackageWriter?

Samo kada vaš backend za pohranu nije lokalni sustav datoteka — na primjer, učitavanje izravno iz toka cloud pohrane bez stvaranja privremene datoteke.

Jesu li nepodržani dijelovi u PackageModelu sačuvani prilikom spremanja?

Nesvakidašnji dijelovi u UnsupportedParts nisu zajamčeni da će biti zapisani nazad. Za očuvanje integriteta nesvakidašnjih dijelova prilikom povratnog procesa, izvršite post‑obradu spremljenog XLSX‑a na razini ZIP‑a.

Koja je razlika između PackageStructureException i WorkbookLoadException?

PackageStructureException je greška na razini OPC/ZIP (nedostaje tip sadržaja, prekinuta veza). WorkbookLoadException je greška višeg nivoa pri parsiranju XLSX XML sadržaja.

Vidi također

 Hrvatski