以编程方式创build大型Excel工作表

我们使用OpenPyxl将MySQL内容以XSLX格式导出到Microsoft Excel

https://bitbucket.org/ericgazoni/openpyxl/overview

但是,我们处理的数据量很大。 我们正在跑出内存的情况。 表格最多可以包含50000行以上的400列。 即使文件很大,它们也不是那么大,Microsoft Excel或OpenOffice应该有问题。 我们假设我们的问题主要来源于Python将XML DOM结构保存在内存中的效率不够高的事实。

编辑:埃里克,OpenPyxl的作者,指出有一个选项,使OpenPyxl与固定的内存使用写入。 然而,这并没有完全解决我们的问题,因为我们仍然在原始速度上遇到问题,而其他的东西却在Python中占用太多的内存。

现在我们正在寻找更有效的方法来创buildExcel文件。 最好使用Python,但是如果我们找不到一个好的解决scheme,我们也可能要看看其他的编程语言。

选项,不以任何特定的顺序,包括

1)使用OpenOffice和PyUno,希望他们的内存结构比OpenPyxl更有效率,并且TCP / IP调用网桥足够高效

2)Openpyxl使用xml.etree。 Python lxml(libxml2本机扩展)会更有效率的XML内存结构,是否有可能直接用xml.etreereplacelxml插入,例如与猴子修补? (如果有明确的好处,则可以将这些更改提供给Openpyxl)

3)从MySQL导出到CSV,然后使用Python和文件迭代将CSV文件直接后处理到XSLX

4)使用其他编程语言和库(Java)

指针:

http://dev.lethain.com/handling-very-large-csv-and-xml-files-in-python/

Writing xlsx with java…

如果您打算使用Java,那么您将希望使用Apache POI,但可能不是常规的UserModel,因为您希望保留内存占用。

相反,看看BigGridDemo ,它展示了如何使用POI编写一个非常大的xlsx文件,大部分工作不在内存中。

你也可能会发现BigGridDemo中使用的技术同样可以在Python中使用吗?

你有没有试图看看优化的作家为openpyxl? 这是一个最近的function(2个月),但它非常强大(用于几个企业项目的生产),可以处理几乎无限的数据量和稳定的内存消耗(大约7Mb)

http://packages.python.org/openpyxl/optimized.html#optimized-writer