Comment travailler avec le packaging OOXML dans .NET

Comment travailler avec le packaging OOXML dans .NET

Un fichier XLSX est un archive ZIP Open Packaging Convention (OPC). Aspose.Cells FOSS pour .NET expose la structure de paquet sous-jacente par le biais d’un PackageModel, PackagePartDescriptor, IPackageReader,et IPackageWriter.Ce sont des API à niveau d’infrastructure essentiellement utiles pour les diagnostics et les implémentations de stockage personnalisées. dotnet add package Aspose.Cells_FOSS.

Guide étape par étapes

Étape 1 : Installer le package

dotnet add package Aspose.Cells_FOSS

Étape 2 : Importer le nom de l’espace

using Aspose.Cells_FOSS;

Étape 3 : Travailler avec PackageStructureException

PackageStructureException est jeté lorsque le paquet XLSX a une structure OPC invalidée (par exemple, les relations requises manquent). WorkbookLoadException Lorsque vous téléchargez des fichiers à partir de sources non confiées.

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

Étape 4 : Comprendre IPackageReader et IPacageWriter

IPackageReader Définir A Read() la méthode de lecture d’un paquet OPC; IPackageWriter Définir A Write() La bibliothèque fournit des applications sous-jacentes par ZIP. Des applications personnalisées peuvent être livrées lors de la charge ou d’épargner à un stockage non-système (par exemple, les blocs en nuage ou les buffers en mémoire).

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

Étape 5 : Vérifier les pièces non supportées

Lorsque vous téléchargez un fichier XLSX, PackageModel.UnsupportedParts liste des pièces que la bibliothèque ne traite pas. Ces pièges sont conservés mais non interprétées. PackageLoadContext pendant un flux de charge personnalisé pour inspecter le modèle.

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

Problèmes communs et fixations

PackageStructureException Il est jeté avec TryRepairPackage = true. Certains défauts structurels de l’OPC sont au-delà de la réparation automatique (par exemple, une carte du type de contenu totalement manquante). Vérifier que le fichier est un ZIP valide avec unzip -t file.xlsx.Si valide, il peut être chiffré - les fichiers protégés par mot de passe ne sont pas supportés.

Workbook Il y a des contenus mais il manque un peu de contenu. Vérifier LoadDiagnostics.Issues Pour DataLossRisk = true Les pièces sont des éléments qui ont été déchirés pendant la réparation.

Custom IPackageReader Il n’est pas appelé. Assurez-vous que le surcharge de constructeur qui accepte le lecteur personnalisé est utilisé. Workbook Le constructeur surcharge accepte un lecteur de paquets personnalisé.

Questions fréquemment posées

Quand dois-je mettre en œuvre IPackageReader ou IPacageWriter ?

Seulement lorsque votre backend de stockage n’est pas le système de fichiers local – par exemple, en charge directement d’un flux de stocks cloud sans créer un fichier temporaire.

Les pièces non supportées dans PackageModel sont-elles conservées ?

Les pièces non standard dans le UnsupportedParts Pour la fidélité de pièces non standard, post-processation le sauvé XLSX au niveau ZIP.

Quelle est la différence entre PackageStructureException et WorkbookLoadEx exception ?

PackageStructureException Il s’agit d’un échec au niveau OPC/ZIP (perte de type de contenu, rupture de relation). WorkbookLoadException Il s’agit d’un échec de niveau supérieur dans la partage du contenu XML XLSX.

Voir aussi

 Français