none
Importar Excel con 6 millones de registros

    Pregunta

  • Estimados,

    Se perfectamente como importar un documento Excel con 300 registros, 1.500 y 2.000 registros en una aplicación programada con VB.NET Framework 4.0, mi pregunta es ¿cual sería la forma correcta, segura, rápida y confiable de importar un excel con unos 6 millones de registros (incluso más)?

    Saludos.

    • Cambiado Enrique M. Montejo sábado, 15 de agosto de 2015 18:29 Programación con Microsoft Excel.
    jueves, 30 de julio de 2015 22:50

Todas las respuestas

  • Hola dfuentescea,

    ¿Has analizado la posibilidad de atacar el problema por SSIS? 

    viernes, 31 de julio de 2015 1:09
  • La verdad es que no he analizado absolutamente nada, es precisamente el motivo de mi pregunta, para conocer opciones.

    Veré la que mencionas, conoces otra(s) más?

    viernes, 31 de julio de 2015 14:12
  • Otra cosa, la idea es que sea el usuario final quien use la funcionalidad, no lo mencioné antes, creo que es importante decirlo.

    Saludos.

    viernes, 31 de julio de 2015 14:13
  • Primero es garantizar la subida del archivo.

    Luego una forma correcta seria hacer uso de la librería OpenXml que te permitirá abrir el excel y leer su contenido, al ser pesado sera mejor que lo hagas de forma asíncrona o por hilos.


    Lo escencial es invisible a los ojos. http://afernandeznet.wordpress.com/

    martes, 1 de septiembre de 2015 16:58
  • Lo más eficiente para cargar datos en SQL Server desde VB.NET es usar la clase SqlBulkCopy. Hay dos maneras de pasarle los datos de origen clase SqlBulkCopy, un DataSet o un DataReader. Lo más recomendable cuando se trata de un número relativamente alto de registros es usar un DataReader. O sea que lo que lo tendrías que hacer es obtener un data reader a partir de archivo Excel, configurar correctamente SqlBulkCopy y pasarle el data reader a SqlBulkCopy.WriteToServer. Para obtener el DataReader puedes ejecutar una consulta sobre el Excel usando el proveedor oledb de jet si es un archivo xls o el Microsoft Access Database Engine si es un xlsx. Otras posibilidades para obtener el data reader  son usar Excel DataReader  o implementar un Data reader usando ClosedXML
    martes, 1 de septiembre de 2015 17:24
  • Hola:

    Tengo la curiosidad de saber que versión tienes de Excel que te permite tener 6 millones de registros.

    Que yo sepa, la única forma de tener más de 1 millón de registros es tener un 'enlace' a una fuente de datos no Excel... entonces podrías intentar importar directamente desde esa fuente.

    Un saludo

    viernes, 8 de marzo de 2019 8:28
  • Efectivamente, en todas las versiones de .xslx hasta el Excel 2016, el máximo número de filas es de un millón (más exactamente 1048576). Se puede exceder esta cifra usando el plugin de PowerPivot, que no tiene límite de filas siempre que el volumen total de datos no exceda 2GB (las almacena en un BLOB dentro del xslx).

    Por desgracia, esto implica que no hay ninguna forma fácil de exportar esas filas. Los mecanismos habituales tales como usar OpenXml, usar SSRS o usar el driver de OleDb fallarán si los datos están en PowerPivot. No sé si PowerPivot expone los datos vía OLE COM, pero incluso aunque lo hiciese esto sería horriblemente lento con ese número de filas.

    Asi que la única opción razonable sería importar los datos directamente desde la misma fuente que se utilizó previamente para alimentar el PowerPivot, como ya se sugirió en una respuesta anterior.

    • Propuesto como respuesta José Mª Fueyo viernes, 8 de marzo de 2019 15:01
    viernes, 8 de marzo de 2019 11:43