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

  1. GroupDocs.Comparison for .NET – download do site oficial here.
  2. Ambiente de desenvolvimento C# – Visual Studio 2022 ou qualquer IDE que suporte .NET 6+.
  3. Arquivos Excel – duas pastas de trabalho .xlsx que você deseja comparar.
  4. Entendimento básico de streams – conceitos de System.IO.Stream sã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 .xls com um .xlsx na 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 FileStream em um bloco using.
  • Processamento em lote: Use Parallel.ForEach com 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 ComparisonException para 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 MemoryStream e 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 BlobStream e 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}.");

Tutoriais relacionados