Como ler os dados do arquivo excel usando c# [duplicate]
- a ler ficheiros do Excel a partir de C# 32 respostas
a minha aplicação precisa de ler dados de um ficheiro excel. Eu estou usando. Net e C# para o desenvolvimento. Não posso instalar o MS office no sistema. Por causa disso a minha aplicação não consegue ler o arquivo excel e lança um erro ao carregar o dll para o excel.
Como posso aceder ao ficheiro excel na minha aplicação num sistema onde o ms office não está instalado?
5 answers
Existe a opção de usar OleDB
e usar as folhas do Excel como datatables em uma base de dados...
string con =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" +
@"Extended Properties='Excel 8.0;HDR=Yes;'";
using(OleDbConnection connection = new OleDbConnection(con))
{
connection.Open();
OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
using(OleDbDataReader dr = command.ExecuteReader())
{
while(dr.Read())
{
var row1Col0 = dr[0];
Console.WriteLine(row1Col0);
}
}
}
Este exemplo usa o fornecedor Microsoft.Jet.OleDb.4.0
para abrir e ler o ficheiro Excel. No entanto, se o arquivo é do tipo xlsx (do Excel 2007 e mais tarde), então você precisa baixar os componentes Microsoft Access Database Engine e instalá-lo na máquina de destino.
O fornecedor chama-se Microsoft.ACE.OLEDB.12.0;
. Preste atenção ao fato de que há duas versões deste componente, uma para 32bit e uma para 64bit. Escolha o apropriado para a bitness de sua aplicação e que versão do Office está instalado (se houver). Há um monte de peculiaridades para ter esse driver trabalhando corretamente para a sua aplicação. veja esta questão por exemplo .
CSharpJExcel para a leitura dos ficheiros do Excel 97-2003 (xls): http://sourceforge.net/projects/jexcelapi/
E ExcelPackage para a leitura dos ficheiros do Excel 2007/2010 (Office Open XML format, xlsx): http://excelpackage.codeplex.com/
E ExcelDataReader, que parece ter a capacidade de lidar com ambos os formatos: https://github.com/ExcelDataReader/ExcelDataReader
Boa sorte!using System.Data;
using System.Data.OleDb;
namespace Data_Migration_Process_Creator
{
class Class1
{
private DataTable GetDataTable(string sql, string connectionString)
{
DataTable dt = null;
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
using (OleDbDataReader rdr = cmd.ExecuteReader())
{
dt.Load(rdr);
return dt;
}
}
}
}
private void GetExcel()
{
string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);
foreach (DataRow dr in dt.Rows)
{
//Do what you need to do with your data here
}
}
}
}
Nota: Não tenho ambiente para testar isto. Escritório instalado) então eu não posso dizer se ele vai funcionar em seu ambiente ou não, mas eu não vejo por que ele não deve funcionar.
Salve o ficheiro Excel para CSV, e leia o ficheiro resultante com C# usando uma biblioteca de leitura CSV como FileHelpers.
Converter o ficheiro excel para .csv
ficheiro (valor separado por vírgulas ficheiro) e agora pode facilmente lê-lo.