Hogyan dolgozzunk az OOXML csomagolással .NET-ben

Hogyan dolgozzunk az OOXML csomagolással .NET-ben

Egy XLSX fájl egy Open Packaging Convention (OPC) ZIP archívum. Az Aspose.Cells FOSS for .NET a mögöttes csomagstruktúrát a PackageModel, PackagePartDescriptor, IPackageReader és IPackageWriter segítségével teszi elérhetővé. Ezek infrastruktúra-szintű API-k, elsősorban diagnosztikához és egyedi tárolási megvalósításokhoz hasznosak. Telepítés a dotnet add package Aspose.Cells_FOSS‑vel.

Lépésről lépésre útmutató

1. lépés: A csomag telepítése

dotnet add package Aspose.Cells_FOSS

2. lépés: Névtér importálása

using Aspose.Cells_FOSS;

3. lépés: A PackageStructureException kezelése

PackageStructureException akkor dobódik, amikor az XLSX csomagnak érvénytelen OPC struktúrája van (pl. hiányzó kötelező kapcsolatok). Fogja el a WorkbookLoadException-val együtt, amikor megbízhatatlan forrásokból tölt be fájlokat.

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

4. lépés: Az IPackageReader és az IPackageWriter megértése

IPackageReader egy Read() módszert definiál az OPC csomag olvasásához; IPackageWriter egy Write() módszert definiál a íráshoz. A könyvtár alapértelmezett ZIP-alapú megvalósításokat biztosít. Egyedi megvalósítások biztosíthatók, amikor nem‑fájlrendszer tárolóból töltünk be vagy oda mentünk (például felhő‑blobokba vagy memória‑pufferekbe).

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

5. lépés: Nem támogatott részek ellenőrzése

XLSX fájl betöltésekor a PackageModel.UnsupportedParts felsorolja azokat a részeket, amelyeket a könyvtár nem dolgoz fel. Ezek megmaradnak, de nem kerülnek értelmezésre. A PackageLoadContext-hez férj hozzá egy egyedi betöltési folyamat során a modell ellenőrzéséhez.

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

Gyakori problémák és megoldások

PackageStructureException akkor is keletkezik, ha TryRepairPackage = true. Néhány OPC szerkezeti hiba meghaladja az automatikus javítást (például a content-type map teljes hiánya). Ellenőrizze, hogy a fájl érvényes ZIP-e a unzip -t file.xlsx segítségével. Ha érvényes, lehet, hogy titkosított — a jelszóval védett fájlok nem támogatottak.

Workbook betöltődik, de néhány tartalom hiányzik. Ellenőrizze LoadDiagnostics.Issues-t a DataLossRisk = true bejegyzésekért. Ezek azt jelzik, hogy a javítás során mely részek lettek eldobva.

Custom IPackageReader nem hívódik meg. Győződjön meg róla, hogy a testreszabott olvasót elfogadó konstruktor túlterhelés van használva. Nem minden Workbook konstruktor túlterhelés fogadja el a testreszabott csomagolvasót.

Gyakran Ismételt Kérdések

Mikor kell implementálnom az IPackageReader vagy az IPackageWriter interfészt?

Csak akkor, ha a tárolási háttér nem a helyi fájlrendszer — például közvetlenül egy felhőalapú tárolási adatfolyamból tölt be, anélkül hogy ideiglenes fájlt hozna létre.

Az unsupported parts a PackageModelben mentéskor megmaradnak?

A UnsupportedParts nem szabványos részei nem garantáltak, hogy vissza lesznek írva. A nem szabványos részek körkörös hűségének biztosításához dolgozza fel a mentett XLSX-et a ZIP szinten.

Mi a különbség a PackageStructureException és a WorkbookLoadException között?

PackageStructureException egy OPC/ZIP szintű hiba (hiányzó tartalomtípus, sérült kapcsolat). WorkbookLoadException egy magasabb szintű hiba az XLSX XML tartalom feldolgozásakor.

Lásd még

 Magyar