Trabalhar com OOXML Packaging
Trabalhar com OOXML Packaging
Um arquivo XLSX é um arquivos ZIP de convenção aberta (OPC). Aspose.Cells FOSS para .NET expõe a camada de pacote subjacente através do IPackageReader, IPackageWriter, e o PackageModel Estas são APIs de baixo nível destinadas a diagnósticos e ferramentas A maioria das aplicações usa apenas o gráfico de alto nível. Workbook - A classe.
Modelo de embalagem
PackageModel representa o conteúdo lógico de um arquivo XLSX. Exponha três coleções: Parts (todas as partes de conteúdo), Relationships (Entradas relativas ao CPO), e UnsupportedParts Cada parte é descrita por um código de identificação (por exemplo, o número de páginas que estão presentes no ficheiro e não são processadas pela biblioteca). PackagePartDescriptor com: PartUri, ContentType, e Category.
using Aspose.Cells_FOSS;
// PackageModel is accessed via PackageLoadContext during custom load flows
// The following illustrates the object structure
// var context = new PackageLoadContext(workbook, packageModel);
// var model = context.Package;
// foreach (var part in model.Parts)
// {
// Console.WriteLine($"URI={part.PartUri}, Type={part.ContentType}");
// }
// Console.WriteLine("Unsupported parts: " + model.UnsupportedParts.Count);Nota::
PackageModelé preenchida internamente ao carregar um arquivo XLSX. A instanciação direta não faz parte do fluxo de trabalho padrão de alto nível.
IPacqueteReader e IPackageWriter
IPackageReader define uma única Read() método para a leitura de um pacote OPC. IPackageWriter define uma única Write() Estas interfaces são implementadas pelo leitor/escritor interno baseado em ZIP da biblioteca e podem ser fornecidas por implementações personalizadas para cenários de armazenamento na memória ou na nuvem.
// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }PackageStructureException
PackageStructureException é lançado quando a estrutura do pacote XLSX é fundamentalmente inválida por exemplo, quando as relações OPC necessárias estão faltando. Ela estende a hierarquia geral de exceção e carrega uma mensagem descrevendo qual invariante estrutural foi violada.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("bad.xlsx", opts);
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}Dicas e melhores práticas
- Utilização:
PackageModel.UnsupportedPartsPara descobrir peças não-padrão que podem ser silenciosamente deixadas cair em viagem de ida e volta. - Captura de peixe
PackageStructureExceptionAlém de:WorkbookLoadExceptionquando carregam ficheiros de fontes não confiáveis. - A Comissão
IPackageReader/IPackageWriterAs interfaces são pontos de extensão; implementá-las apenas quando se necessita de armazenamento personalizado (por exemplo, carregamento a partir de um blob em nuvem sem arquivo local). - Para a maioria dos diagnósticos,
LoadDiagnostics(acessível via:Workbook.LoadDiagnostics) é suficiente a descida para o pacote raramente é necessária.
Problemas comuns
| Emissão | Causa da morte | Correção |
|---|---|---|
PackageStructureException em carga | Falta de relação OPC exigida | Set (s) TryRepairPackage = true em: LoadOptions; verificação LoadDiagnostics.Issues após carga |
UnsupportedParts não vazio. | Arquivo contém extensões não-padrão | Estas peças são preservadas literalmente em salvo se estiverem presentes durante a carga. |
Custa IPackageReader Não invocado | Passado para sobrecarga de constructor errado | Assegurar a LoadOptions ou constructor sobrecarga aceitando o leitor personalizado é usado |
FAQ
Preciso de usar o IPackageReader/IPackerWriter para a elaboração normal das planilhas?
Não. Estas interfaces são pontos de extensão para cenários avançados. Todas as operações padrão leitura/escritura passam através da interface do computador, e todas as outras funções estão disponíveis no sistema. Workbook Diretamente.
As partes não suportadas são preservadas no save?
Partes enumeradas em: PackageModel.UnsupportedParts Se for exigida a fidelidade de ida e volta para peças não normalizadas, utilizar uma etapa de pós-processamento no nível do zip.
Qual a diferença entre PackageStructureException e WorkbookLoadExcept?
PackageStructureException indica uma falha no nível OPC/ZIP (tipo de conteúdo em falta, relação quebrada). WorkbookLoadException indica uma falha de análise ou semântica de nível superior no conteúdo do XLSX.
Resumo de referência da API
| Classe / Interface | Descrição: |
|---|---|
IPackageReader | Interfaces para leitura de um pacote OPC (Read método) |
IPackageWriter | Interfaces para a escrita de um pacote OPC (Write método) |
PackageLoadContext | Acompanhamento de uma Workbook à sua PackageModel |
PackageLoadContext.Package | Retorna o número de dados: PackageModel |
PackageModel.Parts | Todas as partes do conteúdo da embalagem |
PackageModel.Relationships | Informações relativas à OPC |
PackageModel.UnsupportedParts | Partes não transformadas pela biblioteca |
PackagePartDescriptor.PartUri | URI do OPC da peça |
PackagePartDescriptor.ContentType | Tipo de conteúdo MIME da parte |
PackagePartDescriptor.Category | Categoria lógica (folha de trabalho, estilos etc.) |
PackageStructureException | Acusados de violações estruturais do CPO |