Estamos utilizando OpenPyxl para exportar contenido de MySQL a Microsoft Excel en formato XSLXla creación de grandes hojas de Excel mediante programación
https://bitbucket.org/ericgazoni/openpyxl/overview
Sin embargo, la cantidad de datos que nos ocupa es grande. Nos estamos quedando sin memoria. Las tablas pueden contener hasta 400 columnas en más de 500 filas. Incluso los archivos son grandes, no son tan grandes como para que Microsoft Excel u OpenOffice tengan problemas con ellos. Estamos asumiendo que nuestros problemas provienen principalmente del hecho de que Python mantiene la estructura XML DOM en la memoria de manera no suficientemente eficiente.
EDITAR: Eric, el autor de OpenPyxl, señaló que hay una opción para hacer que OpenPyxl escriba con el uso de memoria fija. Sin embargo, esto no resolvió nuestro problema por completo, ya que todavía tenemos problemas con la velocidad bruta y algo más que ocupa demasiada memoria en Python.
Ahora estamos buscando maneras más eficientes de crear archivos de Excel. Con Python preferiblemente, pero si no podemos encontrar una buena solución, es posible que deseemos buscar otros lenguajes de programación también.
opciones, no en un orden específico, incluyen
1) El uso de OpenOffice y PyUNO y esperan que sus estructuras de memoria son más eficientes que con OpenPyxl y el puente llamado TCP/IP es lo suficientemente eficiente
2) Openpyxl usa xml.etree. ¿Python lxml (extensión nativa libxml2) sería más eficiente con estructuras de memoria XML y es posible reemplazar xml.etree directamente con lxml drop-in, p. con parche de mono? (Más tarde los cambios podrían ser aportados de nuevo a Openpyxl si hay un beneficio claro)
3) Exportación de MySQL a CSV y luego archivos CSV post-proceso directamente a XSLX usando Python y el archivo iteración
4) Uso otros lenguajes de programación y bibliotecas (Java)
Punteros:
http://dev.lethain.com/handling-very-large-csv-and-xml-files-in-python/
http://enginoz.wordpress.com/2010/03/31/writing-xlsx-with-java/
¿tiene ser xlsx, ¿estás haciendo un formateo personalizado o algo así?si solo era un volcado de csv directo de mysql, Excel puede abrirlos con bastante felicidad sin necesidad del paso de conversión – bumperbox
, necesita formato personalizado, CSV pierde fechas y otras columnas complejas –