Saltar al contenido

Cómo leer datos de un archivo de Excel usando C#

Posteriormente a investigar con expertos en esta materia, programadores de deferentes áreas y maestros dimos con la solución a la pregunta y la compartimos en este post.

Solución:

Hay la opción de usar OleDB y use 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:temptest.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 utiliza el Microsoft.Jet.OleDb.4.0 proveedor para abrir y leer el archivo de Excel. Sin embargo, si el archivo es del tipo xlsx (de Excel 2007 y versiones posteriores), debe descargar los componentes del motor de base de datos de Microsoft Access e instalarlo en la máquina de destino.

El proveedor se llama Microsoft.ACE.OLEDB.12.0;. Presta atención al hecho de que existen dos versiones de este componente, una para 32 bits y otra para 64 bits. Elija el apropiado para el 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. Ver 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 de Excel de 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 sola celda de Excel, supera los 255 caracteres.

CSharpJExcel para leer archivos de Excel 97-2003 (XLS), ExcelPackage para leer archivos de Excel 2007/2010 (formato Office Open XML, XLSX) y ExcelDataReader que parece tener la capacidad de manejar ambos formatos

¡Buena suerte!

No tengo una máquina disponible para probar esto, pero debería funcionar. Primero, probablemente necesitará instalar el controlador del sistema de Office 2007: Componentes de conectividad de datos o Microsoft Access Database Engine 2010 Redistributable. Luego intente con el siguiente código, tenga en cuenta que deberá cambiar el nombre de la Hoja en la instrucció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 = ""; //ie C:TempYourExcel.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 (uno con Office instalado), por lo que no puedo decir si funcionará en su entorno o no, pero no veo por qué no debería funcionar.

Si para ti ha resultado de utilidad este post, sería de mucha ayuda si lo compartes con otros juniors de este modo contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *