我们正在使用 OpenPyxl 以 XSLX 格式将 MySQL 内容导出到 Microsoft Excel
https://bitbucket.org/ericgazoni/openpyxl/overview
但是,我们正在处理的数据量很大。我们正在运行内存不足的情况。表格最多可包含 50000 多行中的 400 列。即使文件很大,它们也没有 Microsoft Excel 或 OpenOffice 应该有问题的那么大。我们假设我们的问题主要源于 Python 以不够有效的方式将 XML DOM 结构保存在内存中的事实。
编辑:OpenPyxl 的作者 Eric 指出,有一个选项可以让 OpenPyxl 使用固定内存使用进行写入。然而,这并没有完全解决我们的问题,因为我们仍然存在原始速度问题以及在 Python 中占用过多内存的其他问题。
现在我们正在寻找更有效的方法来创建 Excel 文件。最好使用 Python,但如果我们找不到好的解决方案,我们可能还想看看其他编程语言。
选项,不按任何特定顺序,包括
1) 使用 OpenOffice 和 PyUno 并希望它们的内存结构比使用 OpenPyxl 更高效,并且 TCP/IP 调用桥足够高效
2) Openpyxl 使用 xml.etree。Python lxml(libxml2 本机扩展)是否会更有效地使用 XML 内存结构,是否可以直接用 lxml 插件替换 xml.etree,例如使用猴子补丁?(如果有明显的好处,以后可以将更改回馈给 Openpyxl)
3) 从 MySQL 导出为 CSV,然后使用 Python 和文件迭代将 CSV 文件直接后处理到 XSLX
4)使用其他编程语言和库(Java)
指针:
http://dev.lethain.com/handling-very-large-csv-and-xml-files-in-python/
http://enginoz.wordpress.com/2010/03/31/writing-xlsx-with-java/