Saltar al contenido

Leer archivo de Excel usando el proveedor de datos OLEDB

Presta atención porque en esta sección encontrarás la respuesta que buscas.Esta crónica ha sido aprobado por nuestros expertos para asegurar la calidad y exactitud de nuestro contenido.

Solución:

esto funcionó para mí

        using (OleDbConnection conn = new OleDbConnection())
        
            DataTable dt = new DataTable();
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path
            + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;MAXSCANROWS=0'";
            using (OleDbCommand comm = new OleDbCommand())
            
                comm.CommandText = "Select * from [" + sheetName + "$]";
                comm.Connection = conn;
                using (OleDbDataAdapter da = new OleDbDataAdapter())
                
                    da.SelectCommand = comm;
                    da.Fill(dt);
                    return dt;
                
            
        

MAXSCANROWS=0 anula el valor predeterminado del registro y analiza todas las filas antes de determinar los tipos. IMEX=1 aún debe incluirse.

Por ejemplo, dada esta tabla:

Header | Header
------ | ------
Cell1  | 2456354
Cell2  | 2456354
Cell3  | 2456354
Cell4  | 2456354
Cell5  | 2456354
Cell6  | 2456354
Cell7  | 2456354
Cell8  | 2456354
Cell9  | A5341

Las siguientes cadenas de conexión perderán A5341

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path 
   + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'"

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path
   + ";Extended Properties='Excel 12.0 Xml;HDR=YES;MAXSCANROWS=0'"

Pero funciona cuando tiene ambos.

Necesitas establecer un valor para TypeGuessRows Registro key a 0, de esta manera el controlador establecerá el tipo de datos en función de todos los valores de columna en lugar de los primeros 8 (predeterminado).

La ubicación de la key difiere de una versión a otra del controlador, puede buscarlo fácilmente en Google según su versión específica. Por ejemplo, para Access Connectivity Engine 2007 sería

HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice12.0Access Connectivity EngineEnginesExcel

Por cierto, no necesita Jet para leer archivos XLS, ACE también es perfectamente capaz de hacerlo.

Valoraciones y reseñas

Eres capaz de añadir valor a nuestra información contribuyendo tu veteranía en las explicaciones.

¡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 *