Como trabalhar com o pacote OOXML em .NET
Um arquivo XLSX é um arquivos ZIP de convenção aberta (OPC). Aspose.Cells FOSS para .NET expõe a estrutura do pacote subjacente através da PackageModel, PackagePartDescriptor, IPackageReader, e IPackageWriter.Estas são APIs de nível de infraestrutura, úteis principalmente para diagnósticos e implementações personalizadas de armazenamento. Instalar com dotnet add package Aspose.Cells_FOSS.
Guia passo a passo
Passo 1: Instalar o pacote
dotnet add package Aspose.Cells_FOSSPasso 2: Importar o espaço de nomes
using Aspose.Cells_FOSS;Passo 3: Manusear a exceção de estrutura do pacote
PackageStructureException é lançado quando o pacote XLSX tem uma estrutura OPC inválida (por exemplo, falta de relações necessárias). WorkbookLoadException quando carregam ficheiros de fontes não confiáveis.
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: Compreender o IPackageReader e o iPacketWriter
IPackageReader define um Read() método de leitura do pacote OPC; IPackageWriter define um Write() método para escrever um. A biblioteca fornece implementações padrão com suporte ZIP. Implementações personalizadas podem ser fornecidas ao carregar ou salvar em armazenamento não do sistema de arquivos (por exemplo, blobs na nuvem ou buffers na 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)");Passo 5: Verificar as peças não suportadas
Ao carregar um arquivo XLSX, PackageModel.UnsupportedParts lista as partes que a biblioteca não processa. Estas são preservadas, mas não interpretadas. Access PackageLoadContext durante um fluxo de carga personalizado para inspecionar o 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 comuns e soluções
PackageStructureException é lançado mesmo com TryRepairPackage = true. Algumas falhas estruturais do OPC não podem ser reparadas automaticamente (por exemplo, o mapa de tipo conteúdo está completamente ausente). Verifique se o arquivo é um ZIP válido com a opção “Zip”. unzip -t file.xlsx.Se válido, pode estar criptografado Os ficheiros protegidos por senha não são suportados.
Workbook Carregamentos, mas falta algum conteúdo. Verificação LoadDiagnostics.Issues para o DataLossRisk = true Estes indicam peças que caíram durante a reparação.
Custa IPackageReader Não está a ser chamado. Certifique-se de que o constructor sobrecarga que aceita a leitura personalizada é usado. Não todos os Workbook O constructor de sobrecargas aceita um leitor de pacotes personalizado.
Perguntas Frequentes
Quando devo implementar o IPackageReader ou o iPacketWriter?
Apenas quando o seu backend de armazenamento não é o sistema de arquivos local por exemplo, carregando diretamente a partir de um fluxo de memória em nuvem sem criar um arquivo temporário.
As partes não suportadas no PackageModel são preservadas na salvação?
Peças não normalizadas em UnsupportedParts Para a fidelidade de ida e volta das peças não-padrão, pós-processar o XLSX salvo no nível ZIP.
Qual a diferença entre PackageStructureException e WorkbookLoadExcept?
PackageStructureException é uma falha no nível OPC/ZIP (tipo de conteúdo em falta, relação quebrada). WorkbookLoadException é um erro de nível superior na análise do conteúdo XML XLSX.