Com treballar amb OOXML en .NET
Un fitxer XLSX és un arxiu ZIP de la Convenció d’Embarcament Obert (OPC). Aspose.Cells FOSS per a .NET exposa l’estructura subjacent del paquet mitjançant PackageModel, PackagePartDescriptor, IPackageReader, i IPackageWriter.Són API a nivell d’infraestructura, utilitzades principalment per al diagnòstic i implementacions de magatzem personalitzades. Instal·lar amb dotnet add package Aspose.Cells_FOSS.
Guia de pas a pas
Pas 1: Instal·la el paquet
dotnet add package Aspose.Cells_FOSSPas 2: Importeu l’espai de noms
using Aspose.Cells_FOSS;Pas 3: Manejar l’excepció de la estructura del paquet
PackageStructureException és llançat quan el paquet XLSX té una estructura OPC invàlida (per exemple, no hi ha relacions necessàries). WorkbookLoadException quan es carguen arxius de fonts no fiables.
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);
}Pas 4: Comprendre l’IPackageReader i l"Ipackagewriter
IPackageReader defineix un Read() mètode per llegir un paquet OPC; IPackageWriter defineix un Write() La biblioteca proporciona implementacions suportades per ZIP de forma predeterminada. Les implementaciones personalitzades es poden proporcionar quan s’encarrega des o en un emmagatzematge no del sistema de fitxers (per exemple, blobs en el núvol o buffers a la memòria).
// 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)");Pas 5: Comprova les parts no suportades.
Quan es carrega un fitxer XLSX, PackageModel.UnsupportedParts L’accés a la biblioteca enregistra les parts que no es procesen. Aquestes són conservades però no interpretades. PackageLoadContext durant un flux de càrrega personalitzat per inspeccionar el 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.");Problemes comuns i fixos
PackageStructureException és llançat fins i tot amb TryRepairPackage = true. Alguns errors estructurals de l’OPC són més enllà d’una reparació automàtica (per exemple, falta completament un mapa del tipus de contingut). Verifica que el fitxer és una ZIP vàlida amb unzip -t file.xlsx.Si és vàlid, pot ser xifrat Els arxius protegits per contrasenya no són compatibles.
Workbook Carrega però falta algun contingut. Check LoadDiagnostics.Issues per a: DataLossRisk = true Les inscripcions indiquen les parts que van caure durant la reparació.
Custom IPackageReader no està sent cridat. Assegureu-vos que s’utilitza la sobrecarga de constructor que accepta el lector personalitzat. No tots els Workbook Les sobrecargues de constructors accepten un lector de paquets personalitzat.
Preguntes freqüents
Quan he d’implementar IPackageReader o IP a PackageWriter?
Només quan el teu backend de l’emmagatzematge no és el sistema local de fitxers per exemple, carregant directament des d’un flux d"emmagatzemació en núvol sense crear un arxiu temporal.
Les parts no suportades en PackageModel estan conservades a l’enregistrament?
Pels no estàndards en UnsupportedParts Per a la fidelitat d’anar i venir de parts no estàndard, posprocesar l’XLSX guardat al nivell ZIP.
Quina és la diferència entre PackageStructureException i WorkbookLoadExcept?
PackageStructureException és un fracàs del nivell OPC/ZIP (tipus de contingut mancant, relació trencada). WorkbookLoadException és un fracàs de nivell superior en l’anàlisi del contingut XML XLSX.