Como comparar arquivos XLSX em C# usando streams – Guia completo
Comparar planilhas Excel manualmente é tedioso e propenso a erros, especialmente quando você precisa validar grandes relatórios financeiros ou auditar conjuntos de dados. Neste tutorial você descobrirá how to compare xlsx arquivos de forma eficiente com o GroupDocs.Comparison para .NET usando processamento baseado em streams. Vamos percorrer cada passo, explicar por que streams são importantes e fornecer dicas práticas que você pode copiar para seus próprios projetos.
Respostas rápidas
- Qual biblioteca lida com a comparação de Excel? GroupDocs.Comparison for .NET.
- Posso comparar arquivos sem salvá‑los no disco? Sim—use streams para trabalhar diretamente com dados em memória.
- É necessária uma licença para produção? Uma licença comercial é obrigatória; um teste gratuito está disponível.
- Quais versões do .NET são suportadas? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
- Quantos formatos de Excel são suportados? Mais de 20, incluindo .xls, .xlsx, .xlsm e .csv.
O que é “how to compare xlsx”?
“How to compare xlsx” refere-se à detecção programática de diferenças entre dois arquivos de pasta de trabalho Excel. O GroupDocs.Comparison para .NET lê cada pasta de trabalho, avalia alterações ao nível de célula e gera um documento de resultado destacado que mostra inserções, exclusões e modificações. A comparação destaca células, linhas e planilhas alteradas, facilitando a revisão das diferenças de forma rápida.
Por que usar comparação baseada em streams?
O processamento por streams reduz a pressão de memória ao ler arquivos em partes em vez de carregar toda a pasta de trabalho na RAM. O GroupDocs.Comparison pode lidar com 50 + formatos de entrada e saída e processar planilhas com centenas de páginas enquanto mantém o uso máximo de memória abaixo de 100 MB em hardware de servidor típico. Isso o torna ideal para serviços web, microsserviços e trabalhos em lote on‑premise.
Pré-requisitos
- GroupDocs.Comparison for .NET – download do site oficial here.
- Ambiente de desenvolvimento C# – Visual Studio 2022 ou qualquer IDE que suporte .NET 6+.
- Arquivos Excel – duas pastas de trabalho
.xlsxque você deseja comparar. - Entendimento básico de streams – conceitos de
System.IO.Streamsão usados ao longo do exemplo.
Importar Namespaces
Os namespaces a seguir dão acesso ao motor de comparação e às utilidades de stream.
O namespace GroupDocs.Comparison contém as classes principais de comparação, enquanto System.IO fornece os tipos FileStream e MemoryStream necessários para o manuseio de streams.
Guia de implementação passo a passo
Como o uso de streams afeta o desempenho?
Carregue cada pasta de trabalho com File.OpenRead() e passe o stream resultante diretamente para o comparador. Essa abordagem evita arquivos temporários, reduz o tempo de I/O em até 30 % em armazenamento SSD e mantém o processo totalmente na memória, o que é crucial para APIs web de alta taxa de transferência.
Etapa 1: Inicializar variáveis de saída
Defina onde o resultado da comparação será armazenado. Usar Path.Combine() garante o separador de diretório correto no Windows, Linux ou macOS.
Pro Tip: Em produção, escreva a saída em uma pasta temporária ou bucket de armazenamento em nuvem para manter o diretório da aplicação limpo.
Etapa 2: Criar objeto Comparer
A classe Comparer é o componente central que orquestra a comparação de dois ou mais documentos.
Crie uma instância de Comparer abrindo a pasta de trabalho fonte com File.OpenRead(). A instrução using garante que o stream do arquivo seja fechado automaticamente, evitando vazamentos de manipuladores de arquivo.
Etapa 3: Adicionar documento alvo
Adicione a segunda pasta de trabalho ao comparador. Você pode encadear alvos adicionais se precisar comparar um arquivo mestre contra várias variantes — útil para relatórios regionais ou cenários de controle de versão.
Etapa 4: Executar comparação
Chame o método Compare para gerar o documento de diferenças. O resultado é escrito em um novo stream criado com File.Create(). O arquivo de saída destaca todas as células, linhas e planilhas alteradas, facilitando a revisão visual.
O método Compare executa a comparação e retorna o documento de resultado como um stream.
Etapa 5: Exibir mensagem de sucesso
Após a comparação terminar, registre uma mensagem de sucesso concisa que inclua o caminho de saída. Em uma API real, você retornaria o stream ao chamador ou o armazenaria em armazenamento em nuvem para recuperação posterior.
Problemas comuns e solução de problemas
- Erros de arquivo em uso: Certifique-se de que nenhum outro processo (incluindo o Excel) tenha o arquivo aberto. Streams abertos com
File.OpenRead()adquirem um bloqueio de compartilhamento somente leitura, o que mitiga a maioria dos conflitos. - Picos de memória com arquivos enormes: Para pastas de trabalho acima de 100 MB, habilite a flag
ComparerOptionsEnableMemoryOptimization(se disponível) e monitore a memória privada do processo. - Comparações de formatos mistos: O GroupDocs.Comparison suporta pares de formatos consistentes; evite comparar um arquivo
.xlscom um.xlsxna mesma operação para prevenir incompatibilidades de layout. - Posicionamento de stream: Ao reutilizar um stream, sempre redefina-o com
stream.Seek(0, SeekOrigin.Begin)antes de passá-lo ao comparador.
Manipulação robusta de erros: Capture ComparisonException para pastas de trabalho corrompidas e registre o nome do arquivo para investigação posterior.ComparisonException é lançada pelo GroupDocs.Comparison quando o documento de entrada está corrompido ou usa um formato não suportado.
Desempenho e boas práticas
- Descartar streams prontamente: Envolva cada
FileStreamem um blocousing. - Processamento em lote: Use
Parallel.ForEachcom comparadores assíncronos para lidar com múltiplos pares de arquivos simultaneamente, mas limite o grau de paralelismo para evitar sobrecarga da CPU. - Manipulação robusta de erros: Capture
ComparisonExceptionpara pastas de trabalho corrompidas e registre o nome do arquivo para investigação posterior. - Validar streams de entrada: Verifique o tipo MIME ou o cabeçalho do arquivo antes da comparação para rejeitar uploads não‑Excel antecipadamente.
ComparerOptions fornece configurações de configuração para o processo de comparação, como otimização de memória e controles de sensibilidade.
Cenários avançados de uso
- Comparação de BLOB de banco de dados: Recupere o BLOB Excel do SQL Server, envolva‑o em um
MemoryStreame alimente‑o diretamente ao comparador — sem necessidade de arquivos temporários. - Integração com armazenamento em nuvem: Use o Azure Blob Storage SDK para obter um
BlobStreame passá‑lo ao comparador, permitindo fluxos de trabalho totalmente serverless. - Endpoint de API em tempo real: Exponha um endpoint POST que aceita dois arquivos multipart/form‑data, os compara em tempo real e retorna a diferença como um stream baixável.
Conclusão
Ao aproveitar a API baseada em streams do GroupDocs.Comparison, você obtém uma forma eficiente em memória, segura e escalável de comparar arquivos XLSX em C#. Este guia cobriu tudo, desde a configuração até cenários avançados em nuvem, proporcionando uma base sólida para integrar a comparação de planilhas em qualquer solução .NET.
Perguntas frequentes
Q: O GroupDocs.Comparison para .NET é compatível com todos os formatos Excel?
A: Sim, ele suporta mais de 20 formatos relacionados ao Excel, incluindo .xls, .xlsx, .xlsm e .csv, garantindo ampla compatibilidade entre pastas de trabalho legadas e modernas.
Q: Posso personalizar o estilo visual do resultado da comparação?
A: Absolutamente. A API permite definir cores de destaque, alterar o estilo da borda e ajustar o nível de sensibilidade de alterações através de ComparisonOptions.
Q: Preciso de uma licença comercial para uso em produção?
A: Uma licença válida do GroupDocs.Comparison é necessária para qualquer implantação comercial. Você pode obter uma aqui.
Q: Existe um teste gratuito disponível?
A: Sim, você pode baixar um teste totalmente funcional aqui para avaliar todos os recursos antes de comprar.
Q: Onde posso obter suporte da comunidade?
A: O fórum GroupDocs.Comparison aqui é um local ativo para fazer perguntas e compartilhar soluções com outros desenvolvedores.
Última atualização: 2026-06-21
Testado com: GroupDocs.Comparison 23.10 for .NET
Autor: GroupDocs
using System;
using System.IO;
string outputDirectory = "Your Document Directory";
string outputFileName = Path.Combine(outputDirectory, "result.xlsx");
using (Comparer comparer = new Comparer(File.OpenRead("source.xlsx")))
comparer.Add(File.OpenRead("target.xlsx"));
comparer.Compare(File.Create(outputFileName));
Console.WriteLine($"\nDocuments compared successfully.\nCheck output in {outputDirectory}.");