Jak pracovat s balíčkováním OOXML v .NET

Jak pracovat s balíčkováním OOXML v .NET

XLSX soubor je archiv ZIP podle Open Packaging Convention (OPC). Aspose.Cells FOSS for .NET zpřístupňuje podkladovou strukturu balíčku prostřednictvím PackageModel, PackagePartDescriptor, IPackageReader a IPackageWriter. Jedná se o API na úrovni infrastruktury, která jsou především užitečná pro diagnostiku a vlastní implementace úložiště. Instalujte pomocí dotnet add package Aspose.Cells_FOSS.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

dotnet add package Aspose.Cells_FOSS

Krok 2: Importovat jmenný prostor

using Aspose.Cells_FOSS;

Krok 3: Ošetřit výjimku PackageStructureException

PackageStructureException je vyhozena, když má balíček XLSX neplatnou strukturu OPC (např. chybějící požadované vztahy). Zachyťte ji spolu s WorkbookLoadException při načítání souborů z nedůvěryhodných zdrojů.

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

Krok 4: Pochopit IPackageReader a IPackageWriter

IPackageReader definuje Read() metodu pro čtení OPC balíčku; IPackageWriter definuje Write() metodu pro zápis. Knihovna poskytuje výchozí implementace založené na ZIP. Vlastní implementace lze dodat při načítání z nebo ukládání do úložiště mimo souborový systém (např. cloudové blobové úložiště nebo paměťové buffery).

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

Krok 5: Zkontrolovat nepodporované části

Při načítání souboru XLSX PackageModel.UnsupportedParts uvádí části, které knihovna nezpracovává. Ty jsou zachovány, ale neinterpretovány. Přístup k PackageLoadContext během vlastního načítacího toku k prozkoumání modelu.

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

Běžné problémy a opravy

PackageStructureException je vyvolán i při TryRepairPackage = true.
Některé strukturální selhání OPC jsou mimo automatickou opravu (např. úplně chybějící mapa content‑type). Ověřte, že soubor je platný ZIP pomocí unzip -t file.xlsx. Pokud je platný, může být šifrovaný — soubory chráněné heslem nejsou podporovány.

Workbook načítá, ale některý obsah chybí.
Zkontrolujte LoadDiagnostics.Issues pro DataLossRisk = true položky. Tyto indikují části, které byly během opravy vynechány.

Vlastní IPackageReader není volán. Zajistěte, aby bylo použito přetížení konstruktoru, které přijímá vlastní čtečku. Ne všechna přetížení konstruktoru Workbook přijímají vlastní čtečku balíčku.

Často kladené otázky

Kdy bych měl implementovat IPackageReader nebo IPackageWriter?

Pouze když vaše úložiště není místní souborový systém — například načítání přímo ze streamu cloudového úložiště bez vytvoření dočasného souboru.

Jsou nepodporované části v PackageModel při uložení zachovány?

Nestandardní části v UnsupportedParts nejsou zaručeny, že budou zapsány zpět. Pro zachování věrnosti při zpětném převodu nestandardních částí je třeba po uložení souboru XLSX provést post‑processing na úrovni ZIP.

Jaký je rozdíl mezi PackageStructureException a WorkbookLoadException?

PackageStructureException je chyba na úrovni OPC/ZIP (chybějící typ obsahu, poškozený vztah). WorkbookLoadException je chyba vyšší úrovně při parsování obsahu XML souboru XLSX.

Viz také

 Čeština