Come lavorare con il packaging OOXML in .NET
Un file XLSX è un archivio ZIP conforme alla Open Packaging Convention (OPC). Aspose.Cells FOSS for .NET espone la struttura del pacchetto sottostante tramite PackageModel, PackagePartDescriptor, IPackageReader e IPackageWriter. Queste sono API a livello di infrastruttura principalmente utili per la diagnostica e le implementazioni di archiviazione personalizzate. Installare con dotnet add package Aspose.Cells_FOSS.
Guida passo-passo
Passo 1: Installa il pacchetto
dotnet add package Aspose.Cells_FOSSPasso 2: Importa lo spazio dei nomi
using Aspose.Cells_FOSS;Passo 3: Gestire PackageStructureException
PackageStructureException viene generato quando il pacchetto XLSX ha una struttura OPC non valida (ad es. relazioni richieste mancanti). Catturarlo insieme a WorkbookLoadException quando si caricano file da fonti non attendibili.
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);
}Passo 4: Comprendere IPackageReader e IPackageWriter
IPackageReader definisce un metodo Read() per la lettura di un pacchetto OPC; IPackageWriter definisce un metodo Write() per scriverne uno. La libreria fornisce implementazioni predefinite basate su ZIP. È possibile fornire implementazioni personalizzate durante il caricamento da o il salvataggio su archivi non basati su file system (ad es. blob cloud o buffer in memoria).
// 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)");Passo 5: Verifica le parti non supportate
Durante il caricamento di un file XLSX, PackageModel.UnsupportedParts elenca le parti che la libreria non elabora. Queste vengono conservate ma non interpretate. Accedi a PackageLoadContext durante un flusso di caricamento personalizzato per ispezionare il modello.
// 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.");Problemi comuni e soluzioni
PackageStructureException viene generato anche con TryRepairPackage = true.
Alcuni errori strutturali OPC sono al di là della riparazione automatica (ad es. mappa content‑type completamente mancante). Verificare che il file sia un ZIP valido con unzip -t file.xlsx. Se è valido, potrebbe essere crittografato — i file protetti da password non sono supportati.
Workbook si carica ma alcuni contenuti sono mancanti.
Controlla LoadDiagnostics.Issues per le voci DataLossRisk = true. Queste indicano parti che sono state eliminate durante la riparazione.
Custom IPackageReader non viene chiamato.
Assicurati che venga utilizzato il sovraccarico del costruttore che accetta il lettore personalizzato. Non tutti i sovraccarichi del costruttore Workbook accettano un lettore di pacchetto personalizzato.
Domande frequenti
Quando dovrei implementare IPackageReader o IPackageWriter?
Solo quando il tuo backend di archiviazione non è il file system locale — ad esempio, caricando direttamente da un flusso di archiviazione cloud senza creare un file temporaneo.
Le parti non supportate in PackageModel vengono preservate al salvataggio?
Le parti non standard in UnsupportedParts non sono garantite di essere riscritte. Per garantire la fedeltà round‑trip delle parti non standard, esegui un post‑processo del file XLSX salvato a livello ZIP.
Qual è la differenza tra PackageStructureException e WorkbookLoadException?
PackageStructureException è un errore a livello OPC/ZIP (tipo di contenuto mancante, relazione interrotta). WorkbookLoadException è un errore a livello superiore nell’analisi del contenuto XML di XLSX.