Índice
Instalar com Nuget
Install-Package Spire.XLS
Links Relacionados
Ler arquivos Excel em C# é um requisito comum para muitas aplicações, seja para análise de dados, relatórios ou integração com banco de dados. Embora as bibliotecas Interop da Microsoft possam ser usadas, elas têm limitações (como exigir que o Excel esteja instalado). Em vez disso, exploraremos uma abordagem mais eficiente usando o Spire.XLS, uma biblioteca .NET que permite ler e escrever arquivos Excel sem Interop. Este artigo aborda:
- Biblioteca C# .NET para Ler Excel Sem Interop
- Como Ler um Arquivo Excel em C#
- Ler Dados do Excel para um DataTable
- Ler Dados do Excel para um Banco de Dados
- Conclusão
- Perguntas Frequentes
Biblioteca C# .NET para Ler Excel Sem Interop
O Excel Interop da Microsoft exige que o Excel esteja instalado na máquina, tornando-o inadequado para aplicações do lado do servidor. Em vez disso, bibliotecas como o Spire.XLS oferecem uma solução leve e de alto desempenho, sem dependências do Excel.
Por que usar o Spire.XLS?
- Nenhuma Instalação do Excel Necessária – Funciona de forma independente.
- Suporta .NET Core & .NET Framework – Compatibilidade multiplataforma.
- Ler/Escrever Arquivos Excel – Suporta .xls, .xlsx e .xlsm.
- Importar para DataTable & Bancos de Dados – Integração perfeita com ADO.NET.
Instalação do Spire.XLS
Para começar, instale a biblioteca via Gerenciador de Pacotes NuGet:
Install-Package Spire.XLS
Alternativamente, você pode baixar o Spire.XLS for .NET do nosso site oficial e referenciar o arquivo DLL manualmente.
Como Ler um Arquivo Excel em C#
Esta seção demonstra como ler um arquivo Excel em C# usando a biblioteca Spire.XLS. O processo envolve carregar o arquivo, acessar planilhas e recuperar valores de células programaticamente. Isso é útil para automatizar a extração de dados, processar relatórios do Excel ou integrar dados de planilhas em aplicações.
Passo 1. Importar Namespace Necessário
Para utilizar a funcionalidade do Spire.XLS, você precisa importar seu namespace. Isso dá acesso a classes como Workbook e Worksheet, que são essenciais para operações com arquivos Excel.
- C#
using Spire.Xls;
Passo 2. Carregar um Arquivo Excel
Para carregar um arquivo Excel, crie um objeto Workbook e chame o método LoadFromFile. Isso lê o arquivo na memória, permitindo manipulação posterior.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("input.xlsx");
Passo 3. Obter uma Planilha Específica
Arquivos Excel podem conter várias planilhas. Você pode acessar uma planilha específica indexando a coleção Worksheets (baseada em zero). A primeira planilha está no índice 0, a segunda no 1, e assim por diante.
- C#
Worksheet sheet = wb.Worksheets[0]; //Primeira planilha
Passo 4. Recuperar Valor de uma Célula Específica
Para recuperar o valor de uma célula, use a propriedade CellRange.Value. Especifique os índices de linha e coluna (começando em 1) para localizar a célula. Isso é útil para extrair dados estruturados como cabeçalhos ou registros individuais.
- C#
CellRange cell = sheet.Range[1, 1]; // Linha1, Coluna 1 (A1)
string value = cell.Value;
Abaixo está um exemplo completo de leitura de dados de uma planilha inteira e impressão no console:
- C#
using Spire.Xls;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Get the cell range containing data
CellRange locatedRange = sheet.AllocatedRange;
// Iterate through the rows
for (int i = 0; i < locatedRange.Rows.Length; i++)
{
// Iterate through the columns
for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++)
{
// Get data of a specific cell
string cellValue = locatedRange[i + 1, j + 1].Value?.ToString() ?? "N/A";
// Align output with a width of 22
Console.Write($"{cellValue,-22}");
}
Console.WriteLine();
}
}
}
}
Resultado:

Ler Dados do Excel para um DataTable
Exportar dados do Excel para um DataTable permite uma integração perfeita com controles de UI como DataGridView ou processamento de dados de backend. O Spire.XLS simplifica este processo com seu método integrado ExportDataTable(), que converte automaticamente os dados da planilha em um DataTable estruturado, preservando os cabeçalhos das colunas e os tipos de dados.
Passo 1. Importar Namespace Necessário
Inclua o namespace Spire.XLS para acessar as classes essenciais.
- C#
using Spire.Xls;
Passo 2. Criar um Formulário e Evento de Clique de Botão
Crie um formulário (por exemplo, Form1) e adicione um botão com um manipulador de eventos para ler o arquivo Excel.
- C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// O código irá aqui
}
}
Passo 3. Carregar o Workbook
Dentro do evento de clique do botão, crie um objeto Workbook e carregue o arquivo Excel.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
Passo 4. Exportar Dados para DataTable
Acesse uma planilha específica por seu índice e exporte seus dados para um DataTable usando o método ExportDataTable.
- C#
DataTable dataTable = wb.Worksheets[0].ExportDataTable();
Passo 5. Vincular Dados ao DataGridView
Supondo que você tenha um controle DataGridView em seu formulário, vincule o DataTable ao DataGridView para exibir os dados.
- C#
dataGridView1.DataSource = dataTable;
O seguinte é o código completo para ler dados de um arquivo Excel em um DataTable e exibi-lo em um controle DataGridView do Windows Forms:
- C#
using Spire.Xls;
using System.Data;
namespace ReadExcelIntoDataTable
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Export data from worksheet into a DataTable
DataTable dataTable = sheet.ExportDataTable();
// Bind DataTable to DataGridView
dataGridView1.DataSource = dataTable;
// Dispose resources
wb.Dispose();
}
}
}
Resultado:

Ler Dados do Excel para um Banco de Dados
A integração de dados do Excel com um banco de dados pode otimizar o gerenciamento de dados. Abaixo, vamos percorrer o processo de leitura de um arquivo Excel e importação de seu conteúdo para um banco de dados MySQL. Este método é ideal para automatizar a migração de dados, relatórios ou sincronizar dados do Excel com um banco de dados estruturado.
Passo 1. Instalar a Biblioteca de Dados MySQL
Para interagir com bancos de dados MySQL em suas aplicações .NET, você precisará instalar a biblioteca MySql.Data. Este pacote NuGet fornece as classes e métodos necessários para conectar e manipular bancos de dados MySQL.
- C#
Install-Package MySql.Data
Passo 2. Importar Namespaces Necessários
Antes de trabalhar com arquivos Excel e MySQL, você deve incluir os namespaces necessários. O Spire.XLS é usado para operações com Excel, enquanto o MySql.Data.MySqlClient permite a conectividade com o banco de dados MySQL.
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
Passo 3. Extrair Cabeçalhos e Dados do Excel
O trecho de código a seguir demonstra como extrair cabeçalhos e dados do arquivo Excel. Os cabeçalhos são limpos para evitar conflitos de nomenclatura de colunas do MySQL, enquanto os dados são armazenados em um formato estruturado para inserção posterior.
- C#
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++) {
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
Passo 4. Conectar a um Banco de Dados MySQL
Uma conexão com o banco de dados MySQL é estabelecida usando uma string de conexão, que inclui detalhes do servidor, credenciais e o nome do banco de dados de destino. A instrução using garante a liberação adequada dos recursos.
- C#
string connectionString = "server=localhost;user=root;password=yourpassword;database=yourdatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// A conexão está estabelecida; execute as operações do banco de dados aqui
}
Passo 5. Criar Dinamicamente uma Tabela no MySQL
Este passo gera dinamicamente uma tabela MySQL com colunas que correspondem aos cabeçalhos do Excel. Por simplicidade, todas as colunas são definidas como VARCHAR(255), mas os tipos de dados podem ser ajustados com base nos requisitos.
- C#
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
Passo 6. Preencher a Tabela com Dados
Os dados extraídos do Excel são inseridos na tabela MySQL usando consultas parametrizadas para prevenir injeção de SQL. Cada linha do arquivo Excel é mapeada para um registro de banco de dados correspondente.
- C#
// Prepare the SQL INSERT statement
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Insert data into the table
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
Aqui está o código completo para importar dados de um arquivo Excel para uma tabela MySQL:
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
namespace ExcelToMySQL
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++)
{
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
// Establish a connection to the MySQL database
string connectionString = "server=localhost;user=root;password=admin;database=excel_db;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
// Prepare the SQL INSERT statement
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Insert data into the table
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
}
Console.WriteLine("Dados exportados com sucesso!");
}
}
}
Resultado:

Conclusão
Ler arquivos Excel em C# nunca foi tão fácil, graças a bibliotecas como o Spire.XLS. Este guia o orientou no processo de carregar arquivos Excel, ler seu conteúdo e até mesmo importar os dados para um banco de dados MySQL. Com essas técnicas, você pode aprimorar significativamente as capacidades de manipulação de dados de suas aplicações.
Perguntas Frequentes
Q1: Posso ler arquivos Excel protegidos por senha?
R: Sim, o Spire.XLS suporta a leitura de arquivos Excel criptografados usando:
- C#
wb.OpenPassword = "psd";
wb.LoadFromFile("file.xlsx");
Q2: Como leio os resultados da fórmula em vez da própria fórmula?
R: Você tem duas opções para recuperar os resultados da fórmula:
Para células individuais:
Verifique se uma célula contém uma fórmula usando CellRange.HasFormula e obtenha o valor com CellRange.FormulaValue:
- C#
CellRange cell = sheet.Range[1, 1];
if (cell.HasFormula)
{
string result = cell.FormulaValue.ToString();
}
Para exportação em massa para DataTable:
Use Worksheet.ExportDataTable() com computedFormulaValue: true para exportar valores calculados:
- C#
DataTable data = sheet.ExportDataTable(range, exportColumnNames: true, computedFormulaValue: true);
Q3: Como posso ler dados do Excel para um DataTable?
R: Use o método Worksheet.ExportDataTable() fornecido pelo Spire.XLS.
Q4: Como posso ler um arquivo Excel linha por linha?
R: Consulte o seguinte código:
- C#
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastRow; row++)
{
for (int col = 1; col <= sheet.LastColumn; col++)
{
string cellValue = sheet.Range[row, col].Value?.ToString() ?? string.Empty;
Console.WriteLine(cellValue);
}
}
Obtenha uma Licença Gratuita
Para experimentar plenamente as capacidades do Spire.XLS for .NET sem quaisquer limitações de avaliação, você pode solicitar uma licença de avaliação gratuita de 30 dias.