Leia arquivos do Excel usando o Microsoft Office Interop Excel C#: e uma maneira mais rápida de criar arquivos do Excel sem o Office.
Se você já tentou ler um arquivo do Excel usando o Microsoft Interoperabilidade de escritório Excel C#, já conhece a frustração: incompatibilidade de versões, vazamentos de objetos COM e a necessidade obrigatória de que o Microsoft Office esteja instalado em todas as máquinas que executam o seu código. Neste artigo, vamos apresentar a abordagem tradicional de interoperabilidade, explicar suas falhas e mostrar como oIronXLpermite criar , ler e gravar arquivos do Excel sem essas complicações.
!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100 101010100010010000101111101010000010100100111101000100010101010100001101010100010111110101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}
Como a biblioteca Interop cria uma planilha do Excel?
O namespace Microsoft.Office.Interop.Excel expõe o mesmo modelo de objeto COM que o Excel usa internamente. Para ler ou criar arquivos do Excel por meio desta biblioteca de interoperabilidade, primeiro você instancia um objeto Application, adiciona uma nova pasta de trabalho à sua coleção Workbooks e, em seguida, acessa as células individuais da planilha. O exemplo a seguir demonstra um aplicativo de console mínimo que utiliza Microsoft.Office.Interop.Excel para criar um arquivo XLSX e gravar valores em células.
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
Console.WriteLine("Error: Excel is not properly installed.");
return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
Console.WriteLine("Error: Excel is not properly installed.");
return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices
' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
Console.WriteLine("Error: Excel is not properly installed.")
Return
End If
' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)
' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"
' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()
' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
O código acima cria uma pasta de trabalho do Excel , preenche uma planilha com valores de linhas e células, salva o arquivo e, em seguida, libera manualmente cada objeto COM. Essa limpeza no final não é opcional — ignore-a e você encontrará processos fantasmas do EXCEL.EXE consumindo memória no seu sistema. Observe também que o código verifica se o objeto Application é nulo; Se o Microsoft Office não estiver instalado, todas as linhas subsequentes gerarão um erro. A versão da biblioteca de interoperabilidade do Office deve ser a mesma da versão do Office instalada no computador; caso contrário, você enfrentará erros FileNotFoundException e outros erros de tempo de execução semelhantes, notoriamente difíceis de depurar.
Os desenvolvedores de Visual Basic enfrentam os mesmos desafios ao usar o Microsoft.Office.Interop.Excel do Excel, porque a infraestrutura COM subjacente é idêntica em todas as linguagens .NET .
Que problemas a abordagem de interoperabilidade causa nos servidores e na nuvem?
A Microsoft desencoraja explicitamente o uso do Interoperabilidade de escritório em ambientes de servidor. A biblioteca de interoperabilidade inicia uma instância completa do aplicativo Excel em segundo plano, o que significa que cada solicitação em um servidor web ou aplicativo em nuvem inicia um processo oculto do Windows na área de trabalho. Em um servidor Linux, isso não funcionará de forma alguma. Cadeias de conexão com bancos de dados, caminhos do sistema de arquivos e permissões de usuário tornam-se pontos adicionais de falha quando o Office não está instalado ou quando diferentes versões do Microsoft Office entram em conflito entre si.
Os desenvolvedores costumam postar sobre esses problemas no Stack Overflow e no Microsoft Q&A , buscando maneiras de ler e criar arquivos do Excel sem ter o Excel instalado. A tabela abaixo resume as principais diferenças.
| Recurso | Interoperabilidade de escritório | IronXL |
|---|---|---|
| Requer o Excel instalado. | Sim — apenas a máquina do desenvolvedor e todos os servidores de produção. | Não |
| Formatos de arquivo Excel suportados | XLS, XLSX | XLS, XLSX, CSV, TSV, JSON, XML |
| Multiplataforma (.NET Core, Linux, macOS) | Somente para Windows | Windows, Linux, macOS, Azure |
| É necessária a limpeza do objeto COM. | Sim — manual Marshal.ReleaseComObject | Não |
| Implantação de servidor/nuvem | Não recomendado pela Microsoft | Suporte completo |
| Desempenho | Mais lento — inicia processo oculto do Excel | Melhor desempenho — código .NET gerenciado |
| Suporte para .NET Framework e .NET Core | Somente para .NET Framework | .NET Framework, .NET Core, .NET 5–10 |
Como criar arquivos do Excel sem ter o Microsoft Office instalado?
IronXL é uma biblioteca .NET para Excel que lê, grava e cria arquivos Excel inteiramente em código gerenciado. Não há dependência do Microsoft Office, nenhum objeto COM para liberar e nenhum conflito de versão para depurar. Instale-o via NuGet no Visual Studio usando o Solution Explorer, procure porIronXLe estará pronto para usar. Funciona perfeitamente em todas as versões do .NET Framework 4.6.2+, .NET Core e .NET 5 até .NET 10 em todos os principais sistemas operacionais.
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL
' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
Arquivo Excel criado com IronXL
O código acima alcança o mesmo resultado que o exemplo de interoperabilidade, mas com metade das linhas de código e sem dependências externas. WorkBook.Create() inicializa uma nova pasta de trabalho no formato de arquivo Excel especificado (XLSX por padrão), e CreateWorkSheet adiciona uma planilha nomeada. Os valores das células são definidos por meio de uma sintaxe de indexação clara, e a opção Salvar como lida automaticamente com a extensão do arquivo. Sem Quit(), sem Marshal.ReleaseComObject, sem processo oculto. A mesma API também permite salvar em XLS, CSV, JSON ou XML com uma única chamada de método; consulte a documentação de exportação para obter todas as opções disponíveis.
OIronXLtambém se integra perfeitamente com objetos System.Data, de modo que os dados provenientes de strings de conexão de banco de dados através de um DataTable podem ser gravados diretamente em uma planilha sem a necessidade de iteração manual linha por linha.
Como os dados de uma planilha podem ser lidos e gravados em linhas e células?
A leitura de arquivos Excel existentes é igualmente simples. O método WorkBook.Load aceita o caminho de um arquivo XLS, XLSX ou CSV como uma string. A partir daí, cada planilha expõe suas linhas e células como coleções iteráveis, facilitando a leitura de dados, a modificação de valores ou o envio de resultados para um banco de dados ou servidor.
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
foreach (var cell in row.ToArray())
{
Console.Write(cell.Value + "\t");
}
Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
foreach (var cell in row.ToArray())
{
Console.Write(cell.Value + "\t");
}
Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL
' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Read and display each row of data
For Each row In workSheet.Rows
For Each cell In row.ToArray()
Console.Write(cell.Value & vbTab)
Next
Console.WriteLine()
Next
' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
Como ler arquivos do Excel com o IronXL
Este exemplo mostra como ler arquivos do Excel iterando sobre a coleção Rows e acessando a propriedade Value de cada célula. O padrão de loop aninhado — var row seguido por var cell — reflete naturalmente a maneira como você pensaria em uma planilha. Após ler os dados, o código atualiza uma única célula e salva a planilha em um novo arquivo XLSX, preservando o original. OIronXLrecalcula automaticamente todas as fórmulas do Excel quando uma planilha é modificada, um recurso também oferecido pela biblioteca de interoperabilidade, mas que exige a inicialização de uma instância completa do Excel.
Para cenários mais avançados, como fórmulas, formatação condicional, mesclagem de células ou trabalho com várias planilhas, a referência da API do IronXL abrange todos os métodos e propriedades disponíveis. A biblioteca também oferece suporte ao acesso a partir de controladores ASP.NET , facilitando a geração e o download de arquivos Excel a partir de um aplicativo web ou endpoint de API, sem a necessidade de instalar o Office no servidor.
Qual o melhor caminho a seguir para a automação do Excel em .NET ?
Se um projeto estiver vinculado a um ambiente de desktop Windows legado, onde o Microsoft Office já está instalado e essa mesma versão permanecerá estável, a biblioteca de interoperabilidade poderá funcionar bem para tarefas básicas. Mas para todo o resto — implantações em servidores, aplicativos em nuvem, compilações multiplataforma ou qualquer cenário em que você queira melhor desempenho e menos erros de tempo de execução —, uma biblioteca .NET Excel independente é a escolha óbvia.
OIronXLlida com todas as operações comuns do Excel ( criação de pastas de trabalho , leitura de dados de planilhas do Excel, gravação em células, salvamento em vários tipos de extensão de arquivo, incluindo XLS e XLSX) por meio de uma API limpa e moderna que funciona em qualquer lugar onde o .NET seja executado. Ele suporta projetos em C# e Visual Basic, e o mesmo código funciona no Windows, Linux e macOS sem modificações.
Inicie um teste gratuito de 30 dias para experimentá-lo em seu próprio projeto ou explore as opções de licenciamento quando estiver pronto para implantá-lo.
Perguntas frequentes
Quais são as limitações do uso do Microsoft Office Interop Excel em C#?
Utilizar o Microsoft Office Interop Excel em C# pode levar a problemas como incompatibilidade de versões, vazamento de objetos COM e a necessidade de ter o Microsoft Office instalado em todas as máquinas que executam o código.
Como o IronXL melhora o processo de manipulação de arquivos Excel em C#?
O IronXL permite criar, ler e gravar arquivos do Excel sem a necessidade do Microsoft Office, eliminando problemas como incompatibilidade de versões e vazamentos de objetos COM.
O IronXL pode ser usado em um servidor sem o Microsoft Office instalado?
Sim, o IronXL é seguro para servidores e não requer a instalação do Microsoft Office, tornando-se uma solução multiplataforma para lidar com arquivos do Excel.
Quais são as vantagens de usar o IronXL em vez do Excel Interop?
O IronXL oferece uma maneira mais confiável e eficiente de lidar com arquivos do Excel, pois não depende do Microsoft Office, reduzindo o risco de problemas comuns, como incompatibilidade de versões e vazamentos de objetos COM.
O IronXL é compatível com todas as versões de arquivos do Excel?
O IronXL suporta uma ampla variedade de formatos de arquivo do Excel, incluindo XLSX, XLS, CSV e TSV, tornando-o versátil para diversas operações com arquivos do Excel.
O IronXL requer alguma configuração especial para funcionar em uma máquina?
O IronXL não requer a instalação do Microsoft Office e pode ser facilmente integrado aos seus projetos C# sem nenhuma configuração especial.
O IronXL consegue lidar com arquivos grandes do Excel de forma eficiente?
Sim, o IronXL foi projetado para ler e gravar arquivos Excel grandes de forma eficiente, oferecendo alto desempenho sem as limitações do Interop.
Quais plataformas o IronXL suporta?
O IronXL é multiplataforma, compatível com Windows, Linux e MacOS, o que o torna uma opção flexível para manipulação de arquivos Excel em diferentes ambientes.
Como o IronXL lida com a criação de arquivos do Excel?
IronXL fornece uma API simples para criar arquivos Excel programaticamente em C#, oferecendo recursos para formatar células, gerenciar planilhas e muito mais.
Existe alguma comunidade ou suporte para usuários do IronXL?
Sim, os usuários do IronXL podem acessar documentação, tutoriais e suporte da comunidade para obter ajuda com quaisquer dúvidas sobre integração ou uso.



