Cómo trabajar con el empaquetado OOXML en .NET

Cómo trabajar con el empaquetado OOXML en .NET

Un archivo XLSX es un archivio ZIP de Open Packaging Convention (OPC). Aspose.Cells FOSS para .NET exponer la estructura del paquete subyacente a través de PackageModel, PackagePartDescriptor, IPackageReader,y, IPackageWriter.Estos son APIs de nivel de infraestructura, principalmente útiles para las implementaciones diagnósticas y de almacenamiento personalizado. dotnet add package Aspose.Cells_FOSS.

Guía paso a paso

Paso 1: Instalar el paquete

dotnet add package Aspose.Cells_FOSS

Paso 2: Importación del espacio de nombre

using Aspose.Cells_FOSS;

Paso 3: Mantenerse en el paqueteStructureExcepción

PackageStructureException se lanza cuando el paquete XLSX tiene una estructura OPC inadecuada (por ejemplo, falta de relaciones necesarias). WorkbookLoadException Cuando carga archivos de fuentes no confiables.

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

Paso 4: Comprender IPackageReader y IPacageWriter

IPackageReader Definición a Read() - El método de lectura de un paquete OPC; IPackageWriter Definición a Write() La biblioteca proporciona implementaciones por defecto de ZIP. Las implementación personalizadas se pueden suministrar cuando se carga o se salva a almacenamiento no del sistema de archivos (por ejemplo, blobs en la nube o buffers en 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)");

Paso 5: Verificar las partes no soportadas

Cuando se descarga un archivo XLSX, PackageModel.UnsupportedParts lista de partes que la biblioteca no procesa. Estas son conservadas pero no interpretadas. Acceso PackageLoadContext durante un flujo de carga personalizado para inspeccionar el modelo.

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

Problemas y soluciones comunes

PackageStructureException Se lanza incluso con TryRepairPackage = true. Algunas fallas estructurales de OPC están más allá de la reparación automática (por ejemplo, una tarjeta del tipo de contenido completamente ausente). unzip -t file.xlsx.Si es válido, puede ser cifrado — los archivos protegidos por contraseña no se soportan.

Workbook El contenido está cargado, pero falta algún contenido. Verificar LoadDiagnostics.Issues Para DataLossRisk = true Estas señalan partes que se han perdido durante la reparación.

Custodificación IPackageReader No se llama. Asegúrese de que el sobrecargo del constructor que acepta el lector personalizado se utiliza. Workbook Constructor sobrecarga acepta un lector de paquetes personalizado.

Preguntas frecuentes

¿Cuándo puedo implementar IPackageReader o IPacageWriter?

Sólo cuando su backend de almacenamiento no es el sistema de archivos local, por ejemplo, cargar directamente desde un flujo de almacén en la nube sin crear un archivo temporal.

¿Se conservan las partes no apoyadas en PackageModel?

Las partes no estándar en UnsupportedParts Para la fidelidad de los pies no estándar, el post-proceso salve XLSX al nivel ZIP.

¿Cuál es la diferencia entre PackageStructureException y WorkbookLoadExcepción?

PackageStructureException Es un fracaso de nivel OPC/ZIP (tipo de contenido perdido, relación quebrantada). WorkbookLoadException Es un fracaso de nivel superior en paralizar el contenido XML XLSX.

Ver también

 Español