Como Trabalhar com Processamento XML no .NET
Arquivos XLSX armazenam seus dados em partes XML dentro de um pacote OPC ZIP. Aspose.Cells FOSS for .NET processa esses dados por meio de quatro classes de mapeamento XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper e StylesheetXmlMapper. Compreender essas classes ajuda a diagnosticar falhas de análise e a configurar corretamente o carregamento tolerante a falhas. Instale com dotnet add package Aspose.Cells_FOSS.
Guia passo a passo
Etapa 1: Instalar o Pacote
dotnet add package Aspose.Cells_FOSSEtapa 2: Importar o Namespace
using Aspose.Cells_FOSS;Etapa 3: Entender as Responsabilidades do Mapeador XML
Cada mapeador lida com uma parte XML da estrutura XLSX:
| Mapeador | Parte XML | Manipula |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadados da pasta de trabalho, lista de planilhas, nomes definidos |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Dados de célula, fórmulas, hyperlinks, validações, formatos condicionais |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Valores de string desduplicados |
StylesheetXmlMapper | xl/styles.xml | Estilos de célula, fontes, preenchimentos, bordas |
Esses mapeadores são invocados automaticamente durante a construção Workbook e Save(). Você não os instancia diretamente no código da aplicação.
Etapa 4: Tratar XmlParsingException
XmlParsingException é lançada quando um mapeador encontra XML malformado que não pode ser reparado. Ative TryRepairXml = true em LoadOptions para ativar o caminho de análise tolerante a falhas do mapeador.
using Aspose.Cells_FOSS;
var opts = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("malformed.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
Console.WriteLine("XML repairs applied. Data loss risk: " + diag.HasDataLossRisk);
}
catch (XmlParsingException ex)
{
Console.WriteLine("Unrecoverable XML error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load failed: " + ex.Message);
}Etapa 5: Use LoadDiagnostics para Identificar Problemas XML
Após uma carga bem-sucedida, verifique LoadDiagnostics.Issues para registros DiagnosticEntry para entender quais reparos XML foram aplicados e se algum resultou em perda de dados.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;
foreach (var entry in diag.Issues)
{
Console.WriteLine($"[{entry.Severity}] {entry.Code}");
Console.WriteLine($" Message: {entry.Message}");
Console.WriteLine($" RepairApplied: {entry.RepairApplied} DataLossRisk: {entry.DataLossRisk}");
}Problemas Comuns e Soluções
XmlParsingException mesmo com TryRepairXml = true.
O XML está tão malformado que o analisador tolerante a falhas não pode recuperá‑lo. Isso pode acontecer com arquivos criados por ferramentas não padrão que produzem XML sintaticamente inválido. Não há caminho de recuperação para esses arquivos.
Estilos estão faltando após o carregamento.
O StylesheetXmlMapper pode ter encontrado um xl/styles.xml corrompido. Verifique LoadDiagnostics.Issues para entradas com código relacionado a estilos, e DataLossRisk = true para células afetadas.
Strings compartilhadas aparecem como células vazias.
Um xl/sharedStrings.xml corrompido pode causar células que referenciam a tabela de strings compartilhadas a serem exibidas como vazias. Habilite TryRepairXml para tentar a recuperação.
Perguntas Frequentes
Posso implementar um mapeador XML personalizado?
Não. As classes de mapeamento XML são infraestrutura interna selada e não foram projetadas para extensão.
Por que o SharedStringTableXmlMapper está separado?
A especificação OOXML separa valores de string repetidos em uma tabela de strings compartilhada para reduzir o tamanho do arquivo. O mapper lida com a leitura e gravação desta tabela independentemente dos dados da célula.
O TryRepairXml corrige todos os problemas de análise XML?
TryRepairXml lida com erros recuperáveis, como elementos não fechados, namespaces ausentes e valores de atributos truncados. XML estruturalmente válido, mas semanticamente inconsistente (por exemplo, tokens de fórmula que referenciam células inexistentes) ainda será analisado sem erro.