233 votos

Lectura de archivos de Excel desde C#

Hay una libre o de fuente abierta de la biblioteca para leer archivos de Excel (.xls) directamente desde un programa de C#?

No necesitan ser demasiado extravagante, sólo para seleccionar una hoja de cálculo y la lectura de los datos como cadenas. Hasta ahora, he estado utilizando a la Exportación a texto Unicode función de Excel y el análisis de la resultante (delimitado por tabulaciones) archivo, pero me gustaría eliminar el paso manual.

153voto

Robin Robinson Puntos 1031
var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "anyNameHere");

DataTable data = ds.Tables["anyNameHere"];

Esto es lo que yo suelo usar. Es un poco diferente porque generalmente me pegue un AsEnumerable() en la edición de las tablas:

var data = ds.Tables["anyNameHere"].AsEnumerable();

como esto me permite usar LINQ para buscar y construir las estructuras de los campos.

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
    			new MyContact
    				{
    					firstName= x.Field<string>("First Name"),
    					lastName = x.Field<string>("Last Name"),
    					phoneNumber =x.Field<string>("Phone Number"),
    				});

83voto

Ryan Farley Puntos 7916

Si se trata sólo de simples datos contenidos en el archivo de Excel que puede leer los datos a través de ADO.NET. Ver las cadenas de conexión que se muestra aquí:

http://www.connectionstrings.com/?carrier=excel2007 o http://www.connectionstrings.com/?carrier=excel

-Ryan

Actualización: a continuación, puedes leer la hoja de cálculo a través de algo como select * from [Sheet1$]

27voto

Ian Nelson Puntos 20020

El ADO.NET el enfoque es rápido y fácil, pero tiene un par de peculiaridades que usted debe ser consciente de que, especialmente con respecto a cómo los tipos de datos son manejados.

Este excelente artículo le ayudará a evitar algunos errores comunes: http://blog.lab49.com/archives/196

22voto

Dmitry Shechtman Puntos 1855

Esto es lo que he usado para Excel 2003:

Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Data Source"] = repFile;
props["Extended Properties"] = "Excel 8.0";

StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
    sb.Append(prop.Key);
    sb.Append('=');
    sb.Append(prop.Value);
    sb.Append(';');
}
string properties = sb.ToString();

using (OleDbConnection conn = new OleDbConnection(properties))
{
    conn.Open();
    DataSet ds = new DataSet();
    string columns = String.Join(",", columnNames.ToArray());
    using (OleDbDataAdapter da = new OleDbDataAdapter(
        "SELECT " + columns + " FROM [" + worksheet + "$]", conn))
    {
        DataTable dt = new DataTable(tableName);
        da.Fill(dt);
        ds.Tables.Add(dt);
    }
}

21voto

Michal Puntos 41

¿De Datos de Excel Reader?

http://exceldatareader.codeplex.com/

He utilizado la ira, en un entorno de producción, para la extracción de grandes cantidades de datos de una variedad de archivos de Excel a SQL Server Compact. Funciona muy bien y es bastante robusto.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X