IRONSOFTWAREHOME
USANDO O IRONXL

Como criar uma tabela dinâmica no Excel usando C#

Curtis Chau
Curtis Chau
Updated: 21 de abril de 2026

Trabalhar programaticamente com uma tabela dinâmica do Excel é um requisito comum em aplicações empresariais que precisam analisar e calcular dados de origem. Embora o Excel Interop da Microsoft tenha sido o método tradicional para criar uma tabela dinâmica em um arquivo Excel, soluções modernas como o IronXL oferecem vantagens significativas. Este guia detalha ambos os métodos com exemplos práticos para ajudá-lo a criar uma tabela dinâmica no Excel usando Interop C# ou escolher uma alternativa melhor.

Compreendendo as Duas Abordagens

O que é Excel Interop?

O Excel Interop usa COM (Component Object Model) para controlar diretamente o Microsoft Excel através do C#. Requer que o Office esteja instalado no sistema e essencialmente automatiza o Excel como se um usuário estivesse interagindo com o aplicativo. Cada planilha, pasta de trabalho e célula se torna um objeto que você pode manipular através do código.

O que é IronXL?

IronXL é uma biblioteca .NET independente que pode ler, editar e criar arquivos Excel sem exigir o Microsoft Office. Funciona em Windows, Linux, macOS e contêineres Docker, tornando-o ideal para cenários de implantação modernos. Você pode abrir, salvar e exportar dados sem a sobrecarga do COM interop.

Preparando seu ambiente

Para Excel Interop

PM > Install-Package Microsoft.Office.Interop.Excel

Para IronXL

PM > Install-Package IronXL.Excel

Alternativamente, use a interface do Gerenciador de Pacotes NuGet pesquisando por "IronXL.Excel" e clicando em instalar. Você também pode instalar via .NET CLI com argumentos de comando ou referenciá-lo diretamente do GitHub.

Ambas as bibliotecas estão disponíveis através do NuGet. Observe que o Excel Interop requer uma instalação completa do Microsoft Office, enquanto o IronXL opera de forma independente. Antes de prosseguir, certifique-se de que seu sistema atenda aos requisitos.

Criando uma Tabela Dinâmica Excel Programaticamente com Interop C#

Aqui está um exemplo completo mostrando como criar uma tabela dinâmica programaticamente usando a abordagem tradicional do Interop:

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}

Este código cria uma aplicação Excel, adiciona uma planilha com dados de origem incluindo uma linha de cabeçalho, estabelece um cache de tabela dinâmica, constrói o objeto PivotTable e configura a orientação dos campos. A seção de limpeza é crítica - falhar ao liberar objetos COM causa vazamentos de memória. Cada célula, intervalo e planilha deve ser devidamente descartada para evitar erros em runtime.

A Abordagem Alternativa do IronXL

O IronXL adota uma abordagem diferente trabalhando diretamente com o formato de arquivo do Excel. Veja como obter resultados de análise programaticamente semelhantes:

using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}

Este exemplo do IronXL demonstra como criar uma pasta de trabalho, adicionar planilhas, preencher células com dados e realizar análise de agregação. O código agrupa dados por produto e calcula totais e contagens, criando um relatório resumido. Não há necessidade de gerenciamento de objetos COM, e os métodos são coleções .NET diretas que automaticamente cuidam da memória.

Saída

Como Criar uma Tabela Dinâmica do Excel em C#: Figura 6 - Saída IronXL

Como Criar uma Tabela Dinâmica do Excel em C#: Figura 7 - Saída Sumária

Diferenças e Considerações Chave

Requisitos de Implantação

Excel Interop requer:

  • Instalação do Microsoft Excel com uma licença válida

  • Sistema operacional Windows

  • Permissões e configurações COM adequadas

  • Configuração do servidor para automação do Office IronXL requer:

  • Apenas o pacote de biblioteca IronXL

  • Funciona em qualquer plataforma que suporte .NET

  • Nenhuma instalação ou licença do Office necessária

  • Processo de implantação simplificado

Como Criar uma Tabela Dinâmica do Excel em C#: Figura 8 - Funcionalidades

Qualidade de Código e Manutenção

Interop envolve gerenciar objetos COM cuidadosamente para evitar vazamentos de memória e erros. Todo objeto Excel criado deve ser liberado explicitamente usando os métodos corretos. IronXL usa objetos padrão do .NET com coleta automática de lixo, reduzindo o risco de problemas de recursos.

Tratamento de erros

Com Interop, erros geralmente estão relacionados à disponibilidade do Excel, diferenças de versão ou falhas COM. Erros do IronXL são exceções padrão do .NET, facilitando a depuração. Você pode contar com padrões familiares de try-catch sem se preocupar com problemas específicos de COM.

Melhores Práticas e Recomendações

Escolha Excel Interop quando:

  • Precisar de recursos exatos de tabelas dinâmicas do Excel com todas as opções de formatação

  • O Excel está garantido para estar disponível no sistema

  • Trabalhando apenas em aplicativos de desktop do Windows

  • Requisitos de código legado Escolha IronXL quando:

  • Construindo aplicativos de servidor ou soluções web

  • Exigindo compatibilidade multiplataforma

  • Precisar de desempenho confiável sem overhead COM

  • Implantando em contêineres ou ambientes de nuvem

Visite a documentação do IronXL para aprender mais detalhes sobre a implementação. Para perguntas ou suporte, entre em contato com a equipe da Iron Software.

Conclusão

Embora o C# Interop forneça acesso direto para criar tabelas dinâmicas no Excel, ele vem com limitações de implantação e complexidade. IronXL oferece uma alternativa moderna que simplifica a manipulação de arquivos Excel enquanto proporciona a flexibilidade de ser executado em qualquer lugar que o .NET seja suportado.

Para desenvolvedores criando novos aplicativos ou modernizando soluções existentes, a abordagem do IronXL elimina a sobrecarga do COM Interop enquanto fornece poderosas capacidades de manipulação de dados. Seja para ler, editar ou exportar dados do Excel, o IronXL oferece uma solução mais limpa.

Comece com a versão de teste gratuita do IronXL para experimentar a diferença, ou explore tutoriais para ver mais exemplos. Pronto para implantar? Veja as opções de licenciamento para escolher o pacote certo para sua tarefa.

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.