IRONSOFTWAREHOME
USANDO O IRONXL

Como importar, ler e manipular dados do Excel em C#

Curtis Chau
Curtis Chau
Updated: 28 de junho de 2026

StreamReader não pode ler arquivos do Excel porque os formatos XLSX/XLS são estruturas binárias complexas ou XML comprimidas, não texto simples. Use a biblioteca IronXL em vez disso, que fornece WorkBook.Load() para leitura de arquivos e FromStream() para processamento de fluxo de memória sem dependências do Excel Interop.

Muitos desenvolvedores de C# encontram um desafio comum ao tentar ler arquivos de planilhas do Excel: seu confiável StreamReader, que funciona perfeitamente para arquivos de texto, falha misteriosamente com documentos do Excel. Se você tentou ler arquivos do Excel usando StreamReader em C# apenas para ver caracteres embaralhados ou exceções, você não está sozinho. Este tutorial explica porque StreamReader não pode lidar com arquivos do Excel diretamente e demonstra a solução adequada usando IronXL sem Excel Interop.

A confusão geralmente surge porque arquivos CSV, que o Excel pode abrir, funcionam bem com StreamReader. No entanto, arquivos Excel verdadeiros (XLSX, XLS) requerem uma abordagem fundamentalmente diferente. Compreender essa distinção te fará economizar horas de depuração e te levará à ferramenta certa para o trabalho. Para engenheiros DevOps que implantam aplicativos em containers Docker ou ambientes Kubernetes, isso se torna especialmente crítico, pois dependências nativas podem complicar a containerização.

IronXL for .NET página inicial mostrando exemplo de código em C# para leitura de arquivos do Excel sem interop do Microsoft Office, apresentando recursos da biblioteca e estatísticas de download

Por que StreamReader não consegue ler arquivos do Excel?

StreamReader é projetado para arquivos de texto simples, lendo dados de caracteres linha por linha usando uma codificação especificada. Arquivos do Excel, apesar de sua aparência de planilha, são na verdade estruturas binárias complexas ou XML comprimidas em ZIP que StreamReader não consegue interpretar. Arquivos XLSX modernos seguem o padrão Open XML do Office, enquanto arquivos XLS antigos usam um formato binário proprietário.

static void Main(string[] args)
{
 // This code will NOT work - demonstrates the problem
 using (StreamReader reader = new StreamReader("ProductData.xlsx"))
 {
    string content = reader.ReadLine(); // Attempts to read Excel as text
    Console.WriteLine(content); // Outputs garbled binary data
 }
}

Quando você executa este trecho de código, em vez de ver os dados da sua planilha, você encontrará dados binários, como "PK♥♦" ou caracteres semelhantes. Isso acontece porque arquivos XLSX são arquivos ZIP contendo múltiplos arquivos XML, enquanto arquivos XLS usam um formato binário proprietário. StreamReader espera texto simples e tenta interpretar essas estruturas complexas como caracteres, resultando em uma saída sem sentido. Para aplicações containerizadas, tentar usar bibliotecas nativas do Excel ou COM Interop requereria a instalação do Microsoft Office no seu contêiner, aumentando drasticamente o tamanho e a complexidade da imagem.

O que acontece quando StreamReader tenta processar arquivos do Excel?

O exemplo a seguir mostra um arquivo Excel típico contendo dados de produtos que queremos processar. Observe como os dados estruturados da planilha aparecem limpos e organizados quando visualizados no Excel:

Planilha do Excel mostrando uma tabela de dados de produtos com colunas para nomes de produtos (Laptop, Mouse, Teclado, Monitor, Fones de ouvido), preços, e valores VERDADEIRO/FALSO nas colunas de A a D

Por que a saída mostra caracteres corrompidos?

Quando StreamReader tenta processar este arquivo do Excel, a saída do console revela o problema subjacente. Em vez de dados legíveis, você vê conteúdo binário porque a estrutura do arquivo não pode ser interpretada como texto:

Console de depuração do Visual Studio mostrando a execução bem-sucedida do programa com código de saída 0 e um prompt para pressionar qualquer tecla para fechar a janela

Arquivos Excel modernos (XLSX) contêm múltiplos componentes: planilhas, estilos, strings compartilhadas e relacionamentos, todos empacotados juntos. Essa complexidade requer bibliotecas especializadas que compreendam a estrutura do arquivo Excel, o que nos leva ao IronXL. A biblioteca lida com todas essas complexidades internamente enquanto fornece uma API simples, tornando-a ideal para pipelines de implantação automatizados onde a intervenção manual não é possível.

Como Ler Arquivos Excel com IronXL?

IronXL fornece uma solução direta para ler arquivos Excel em C#. Ao contrário de StreamReader, IronXL entende a estrutura interna do Excel e fornece métodos intuitivos para acessar seus dados. A biblioteca suporta Windows, Linux, macOS e contêineres Docker, tornando-a perfeita para aplicações modernas e multiplataforma. Para equipes DevOps, a arquitetura sem dependências do IronXL significa que não há bibliotecas nativas ou componentes COM para gerenciar durante a implantação.

Diagrama de suporte multiplataforma mostrando compatibilidade .NET em várias versões, sistemas operacionais, ambientes de desenvolvimento e plataformas de nuvem, incluindo Windows, Linux, macOS, Docker, Azure e AWS

Primeiro, instale IronXL via o Gerenciador de Pacotes NuGet:

PM > Install-Package IronXL.Excel

Saída do terminal mostrando a instalação bem-sucedida do pacote IronXL.Excel e suas dependências via Console do Gerenciador de Pacotes no Visual Studio

Aqui está como ler um arquivo Excel corretamente:

using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

Este código carrega seu arquivo Excel com sucesso e fornece acesso limpo aos valores das células. O método WorkBook.Load detecta automaticamente o formato do arquivo (XLSX, XLS, XLSM, CSV) e lida com toda a análise complexa internamente. Você pode acessar células usando a notação familiar do Excel como "A1" ou intervalos como "A1:C5", tornando o código intuitivo para qualquer pessoa familiarizada com o Excel.

Para implantações containerizadas, você pode facilmente incluir endpoints de verificação de integridade que verificam as capacidades de processamento do Excel:

// Health check endpoint for containerized apps
public async Task<IActionResult> HealthCheck()
{
    try
    {
        // Test Excel functionality
        using var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        var sheet = workbook.CreateWorkSheet("HealthCheck");
        sheet["A1"].Value = DateTime.UtcNow;
        
        // Convert to byte array for validation
        var bytes = workbook.ToByteArray();
        return Ok(new { 
            status = "healthy", 
            excelSupport = true,
            timestamp = DateTime.UtcNow 
        });
    }
    catch (Exception ex)
    {
        return StatusCode(503, new { 
            status = "unhealthy", 
            error = ex.Message 
        });
    }
}

Como Ler Excel a Partir de Fluxos de Memória?

Aplicações do mundo real frequentemente precisam processar arquivos Excel de fluxos ao invés de arquivos de disco. Cenários comuns incluem lidar com uploads na web, recuperar arquivos de bancos de dados ou processar dados de armazenamento em nuvem como AWS S3 ou Azure Blob Storage. IronXL lida com essas situações de forma tranquila:

using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
    WorkBook workbook = WorkBook.FromStream(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    // Process the data
    int rowCount = worksheet.RowCount;
    Console.WriteLine($"The worksheet has {rowCount} rows");
    // Read all data into a DataTable
    var dataTable = worksheet.ToDataTable(false);
    // Display DataTable row count 
    Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}

O método FromStream aceita qualquer tipo de fluxo, seja MemoryStream, FileStream ou fluxo de rede. Essa flexibilidade permite processar arquivos Excel de várias fontes sem salvá-los no disco primeiro. O exemplo também demonstra converter dados de planilha em um DataTable, que se integra perfeitamente com bancos de dados e cenários de vinculação de dados. Para arquiteturas de microsserviços, essa abordagem baseada em fluxo minimiza o I/O de disco e melhora o desempenho.

Que resultados o processamento de fluxos de memória produz?

Console de depuração do Visual Studio mostrando saída da leitura de dados do Excel, exibindo 'A planilha tem 5 linhas' e 'Carregado 5 linhas de dados'

Quando devo usar o remetente de objeto em cenários de leitura de Excel?

Em casos onde este código é usado em programação orientada a eventos (por exemplo, lidando com um botão de upload de arquivo no Windows Forms ou ASP.NET), a assinatura do método frequentemente inclui parâmetros como objeto sender e EventArgs e. Este contexto garante que a lógica de processamento do Excel se integre corretamente em eventos de interface de usuário ou serviço. Para APIs conteinerizadas, você pode processar uploads diretamente de pedidos HTTP:

[HttpPost("upload")]
public async Task<IActionResult> ProcessExcelUpload(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");
    
    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0;
    
    var workbook = WorkBook.FromStream(stream);
    var worksheet = workbook.DefaultWorkSheet;
    
    // Process and return results
    var data = worksheet.ToDataSet();
    return Ok(new { 
        sheets = workbook.WorkSheets.Count,
        rows = worksheet.RowCount,
        processed = DateTime.UtcNow
    });
}

Visão geral dos recursos de uma biblioteca de manipulação do Excel para C# mostrando seis categorias principais: Criar, Salvar e Exportar, Editar Workbooks, Trabalhar com Dados, Proteger seus Workbooks, e listagens detalhadas de funcionalidades em cada categoria

Como Converter Entre Excel e CSV?

Enquanto StreamReader pode lidar com arquivos CSV, você frequentemente precisa converter entre formatos Excel e CSV. IronXL torna essa conversão simples, o que é particularmente útil para pipelines ETL e cenários de integração de dados comuns em fluxos de trabalho DevOps:

using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");

Essas conversões preservam seus dados enquanto mudam o formato do arquivo. Ao converter Excel para CSV, IronXL achata a primeira planilha por padrão, mas você pode especificar qual planilha exportar. Converter de CSV para Excel cria uma planilha formatada adequadamente que preserva tipos de dados e permite futuras formatações e adições de fórmulas.

Para pipelines de dados automatizados, você também pode exportar para formatos JSON ou XML:

// Export Excel to multiple formats for data pipelines
var workbook = WorkBook.Load("report.xlsx");

// Export to JSON for API responses
string jsonData = workbook.ToJson();

// Export to HTML for web display
workbook.SaveAsHtml("report.html");

// Export to XML for integration systems
workbook.SaveAsXml("report.xml");

// Export specific range to DataTable for database insertion
var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable();

Práticas Recomendadas para Implementação em Contêiner

Para engenheiros DevOps que implantam aplicações de processamento do Excel, o IronXL oferece várias vantagens. Aqui está um Dockerfile pronto para produção otimizado para processamento de Excel:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# Install any required system fonts for Excel rendering
RUN apt-get update && apt-get install -y \
    fontconfig \
    libfreetype6 \
    && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# Set environment variables for IronXL
ENV IRONXL_LICENSE_KEY=${IRONXL_LICENSE_KEY}
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

ENTRYPOINT ["dotnet", "YourApp.dll"]
Text

Este Dockerfile garante que seu aplicativo de processamento de Excel funcione perfeitamente em contêineres com poucas dependências. O licenciamento é tratado através de variáveis de ambiente, tornando fácil gerenciar em diferentes ambientes de implantação.

Quais São os Próximos Passos para o Processamento de Excel em C#?

A incapacidade de StreamReader processar arquivos do Excel decorre da diferença fundamental entre texto simples e a estrutura complexa de arquivos do Excel. Enquanto StreamReader funciona perfeitamente para CSV e outros formatos de texto, verdadeiros arquivos do Excel exigem uma biblioteca especializada como o IronXL que entende as estruturas binárias e XML dentro.

IronXL oferece uma solução abrangente com sua API intuitiva, suporte extenso a formatos e capacidades de processamento de fluxo impecáveis. Seja você desenvolvendo aplicativos web, software de desktop, ou serviços em nuvem, IronXL lida com arquivos Excel de forma confiável em todas as plataformas. O suporte da biblioteca a formatação condicional, gráficos, fórmulas, e recursos avançados do Excel a torna uma solução completa para aplicativos empresariais.

Para equipes DevOps, a arquitetura compatível com containers do IronXL, dependências mínimas do sistema, e características de desempenho sólido tornam-no uma escolha ideal para aplicações modernas nativas de nuvem. A biblioteca suporta escalabilidade horizontal, funciona perfeitamente em pods Kubernetes, e se integra bem com pipelines CI/CD.

Pronto para começar a trabalhar adequadamente com arquivos Excel? Baixe o teste gratuito do IronXL que melhor se adequa às necessidades do seu projeto. A biblioteca oferece opções de licenciamento flexíveis, incluindo desenvolvimento, produção, e implantação de staging, com opções para ambientes conteinerizados e aplicativos nativos em nuvem.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.