office - libreria para leer excel c#
Cómo leer datos del archivo Excel usando c# (5)
Esta pregunta ya tiene una respuesta aquí:
- Lectura de archivos de Excel desde C # 32 respuestas
Mi aplicación necesita leer datos de un archivo de Excel. Estoy usando .Net yc # para el desarrollo. No puedo instalar MS Office en el sistema. Debido a eso, mi aplicación no puede leer el archivo Excel y arroja un error al cargar el archivo DLL para Excel.
¿Cómo puedo acceder al archivo Excel en mi aplicación en un sistema donde no está instalada la oficina ms?
CSharpJExcel para leer archivos de Excel 97-2003 (xls): http://sourceforge.net/projects/jexcelapi/
y ExcelPackage para leer archivos de Excel 2007/2010 (formato Office Open XML, xlsx): http://excelpackage.codeplex.com/
y ExcelDataReader, que parece tener la capacidad de manejar ambos formatos: https://github.com/ExcelDataReader/ExcelDataReader
¡Buena suerte!
Convierta el archivo de Excel a .csv
(archivo de valores separados por comas ) y ahora podrá leerlo fácilmente.
Guarde el archivo Excel en CSV y lea el archivo resultante con C # utilizando una biblioteca de lectores CSV como FileHelpers .
No tengo una máquina disponible para probar esto, pero debería funcionar. En primer lugar, es probable que deba instalar el 2007 Office System Driver: Componentes de conectividad de datos o Redistribuible de Microsoft Access Database Engine 2010 . Luego intente con el siguiente código, tenga en cuenta que necesitará cambiar el nombre de la Hoja en la declaración Seleccionar a continuación para que coincida con el nombre de la hoja en su archivo de Excel:
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: No tengo un entorno para probar esto (One with Office installed) por lo que no puedo decir si funcionará en su entorno o no, pero no veo por qué no debería funcionar.
Existe la opción de usar OleDB
y usar las hojas de Excel como tablas de datos en una base de datos ...
Solo un ejemplo .....
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 ejemplo usa el proveedor Microsoft.Jet.OleDb.4.0
para abrir y leer el archivo de Excel. Sin embargo, si el archivo es de tipo xlsx (de Excel 2007 y posterior), debe descargar los componentes del Motor de base de datos de Microsoft Access e instalarlo en el equipo de destino.
El proveedor se llama Microsoft.ACE.OLEDB.12.0;
. Preste atención al hecho de que hay dos versiones de este componente, una para 32 bits y otra para 64 bits. Elija la adecuada para la bitness de su aplicación y qué versión de Office está instalada (si corresponde). Hay muchas peculiaridades para que ese controlador funcione correctamente para su aplicación. Vea esta pregunta, por ejemplo .
Por supuesto, no necesita Office instalado en la máquina de destino.
Si bien este enfoque tiene algunos méritos, creo que debe prestar especial atención al enlace señalado por un comentario en su pregunta Lectura de archivos Excel desde C # . Hay algunos problemas con respecto a la interpretación correcta de los tipos de datos y cuando la longitud de los datos, presentes en una única celda de Excel, es más larga que 255 caracteres