none
Superar el limite de exportacion de una gran cantidad de filas de un archivo excel 2003 - 2007 RRS feed

  • Pregunta

  • Como puedo superar el limite de exportacion de filas de un archivo excel ya sea con Excel 2003 o Excel 2007, pues tengo una consulta con 100.000 filas y al exportar con excel 2003 me lanza un error, porque su limite es de 65536 filas,  ahora para otra consulta de 1.800.857 filas tambien me lanza un error en excel 2007, porque su limite es de 1.048.576 filas.

    Ya sea rompiendo este limite en el propio reporting services 2005, 2008 y 2008 R2 y por lenguaje de programacion si esta incrustado el reporte ya sea por windows form o web form (visual basic. net o C#)

    Gracias por su tiempo.


    • Editado RealMaster domingo, 9 de octubre de 2011 6:46
    domingo, 9 de octubre de 2011 6:42

Respuestas

  •  seria ideal que tambien se pueda configurar con la cantidad de filas (cuando llegue a las 65.536 filas), para que luego las coloque en otra hoja (pestaña) pero no tengo idea de como realizarlo, un codigo de ejemplo?


    Para hacer esto, yo prescindiría de Reporting Services. Desde un programa en .Net, abriría la consulta al servidor de base de datos (usando la misma sentencia Select que ahora mismo tengas en el DataSet del Report), e iteraría sobre los registros usando Automatización de Excel para inyectar los datos en una hoja. Sobre la marcha, llevaría un contador de filas para cambiar de hoja cuando se exceda el límite previsto.

    Tienes una explicación de cómo usar desde .Net la automatización de Excel en este artículo de la KB de Microsoft:

    http://support.microsoft.com/kb/302084

    Y en todo caso, sobre ese tema encontrarás miles de artículos en Internet si haces una búsqueda. También se puede usar el driver de Excel mediante ADO.NET para escribir la hoja como si fuera una tabla. Teniendo en cuenta que manejas miles de registros, este método será mucho más rápido que usar la automatización mediante COM.

    La estructura concreta del programa, para transmitir al servidor una consulta SQL y recorrerla con un bucle insertando en Excel, es algo que ya no tiene nada que ver con Reporting Services, puesto que en este caso no lo usaríamos. Las dudas de programación ya no pertenecen a este foro, sino alguno de los de edsarrollo, como por ejemplo el de ADO.NET:

    http://social.msdn.microsoft.com/Forums/es-ES/netfxes/threads

     

    • Marcado como respuesta RealMaster martes, 11 de octubre de 2011 16:47
    martes, 11 de octubre de 2011 6:02
    Moderador

Todas las respuestas

  • [...] sea rompiendo este limite en el propio reporting services 2005, 2008 y 2008 R2 y por lenguaje de programacion [...]

    El problema es que el límite no está en Reporting Services, sino en Excel, que no permite que existan hojas con más filas que las que has indicado. Por lo tanto, nada que se pueda hacer ni en Reporting ni en programación puede superar ese límite, ya que el límite es interno de Excel.

    Me temo que no tendrás más remedio que dividir los datos en varios bloques e importarlos a hojas distintas. Por ejemplo, si son datos de un año, puedes dividirlos por meses y en una hoja meter los datos de enero, en otra los de febrero, etc. Si esto lo haces con SSRS, necesitarás hacer la exportación 12 veces y cada una de ellas te creará un .xls distinto. Pero si lo haces por programación, puedes meter las 12 hojas en 12 pestañas de un mismo xls. También podrías hacer la exportación con SSIS, pero ahora mismo no tengo la seguridad de que SSIS te deje grabar varias hojas separadas en el mismo archivo.

     

    domingo, 9 de octubre de 2011 7:58
    Moderador
  • Hola,

    De forma añadida a lo que comenta Alberto, en SSIS si se puede grabar en distintas hojas. Cada hoja es tratada como una "tabla".


    Víctor M. Sánchez García (ES) (BI) Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky
    lunes, 10 de octubre de 2011 13:28
  • Me temo que no tendrás más remedio que dividir los datos en varios bloques e importarlos a hojas distintas. Por ejemplo, si son datos de un año, puedes dividirlos por meses y en una hoja meter los datos de enero, en otra los de febrero, etc. Si esto lo haces con SSRS, necesitarás hacer la exportación 12 veces y cada una de ellas te creará un .xls distinto. Pero si lo haces por programación, puedes meter las 12 hojas en 12 pestañas de un mismo xls. También podrías hacer la exportación con SSIS, pero ahora mismo no tengo la seguridad de que SSIS te deje grabar varias hojas separadas en el mismo archivo.


    Gracias por la respuesta Alberto, para esta parte que comentas Por ejemplo, si son datos de un año, puedes dividirlos por meses y en una hoja meter los datos de enero, en otra los de febrero, etc. Si esto lo haces con SSRS, necesitarás hacer la exportación 12 veces y cada una de ellas te creará un .xls distinto.

    Seria crear 12 reportes distintos (12 archivos rdf), para que me den los 12 meses, verdad. No se podria realizar una configuracion en el archivo xml que tiene los formatos de exportacion reporting services, para que me lo parta en hojas (pestañas) dadas las 65.536 filas?

    Pero si lo haces por programación, puedes meter las 12 hojas en 12 pestañas de un mismo xls. Esta parte como la haria, seria ideal que tambien se pueda configurar con la cantidad de filas (cuando llegue a las 65.536 filas), para que luego las coloque en otra hoja (pestaña) pero no tengo idea de como realizarlo, un codigo de ejemplo?



    • Editado RealMaster martes, 11 de octubre de 2011 5:37
    martes, 11 de octubre de 2011 5:31
  • De forma añadida a lo que comenta Alberto, en SSIS si se puede grabar en distintas hojas. Cada hoja es tratada como una "tabla".

    Gracias Victor M, como se realiza este trabajo, un codigo de ejmplo porfavor
    martes, 11 de octubre de 2011 5:35
  •  seria ideal que tambien se pueda configurar con la cantidad de filas (cuando llegue a las 65.536 filas), para que luego las coloque en otra hoja (pestaña) pero no tengo idea de como realizarlo, un codigo de ejemplo?


    Para hacer esto, yo prescindiría de Reporting Services. Desde un programa en .Net, abriría la consulta al servidor de base de datos (usando la misma sentencia Select que ahora mismo tengas en el DataSet del Report), e iteraría sobre los registros usando Automatización de Excel para inyectar los datos en una hoja. Sobre la marcha, llevaría un contador de filas para cambiar de hoja cuando se exceda el límite previsto.

    Tienes una explicación de cómo usar desde .Net la automatización de Excel en este artículo de la KB de Microsoft:

    http://support.microsoft.com/kb/302084

    Y en todo caso, sobre ese tema encontrarás miles de artículos en Internet si haces una búsqueda. También se puede usar el driver de Excel mediante ADO.NET para escribir la hoja como si fuera una tabla. Teniendo en cuenta que manejas miles de registros, este método será mucho más rápido que usar la automatización mediante COM.

    La estructura concreta del programa, para transmitir al servidor una consulta SQL y recorrerla con un bucle insertando en Excel, es algo que ya no tiene nada que ver con Reporting Services, puesto que en este caso no lo usaríamos. Las dudas de programación ya no pertenecen a este foro, sino alguno de los de edsarrollo, como por ejemplo el de ADO.NET:

    http://social.msdn.microsoft.com/Forums/es-ES/netfxes/threads

     

    • Marcado como respuesta RealMaster martes, 11 de octubre de 2011 16:47
    martes, 11 de octubre de 2011 6:02
    Moderador
  • Ah listo Gracias por la respuesta.
    martes, 11 de octubre de 2011 16:47
  • Hola RM!
    Yo recomendaria que exportes tus datos en un formato .CSV, este se comporta como texto plano y los datos los puedes separar con "," y al abrirlo con Excel no tiene ninguna diferencia.
    viernes, 3 de agosto de 2012 14:43