以编程方式创建大型Excel表格

8
我们正在使用OpenPyxl将MySQL内容导出到Microsoft Excel的XSLX格式中。

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/


1
它必须是xlsx格式吗?您是否正在进行自定义格式设置或其他操作?如果只是从MySQL中直接导出的csv文件,Excel可以在不需要转换步骤的情况下轻松打开它们。 - bumperbox
1
需要自定义格式,CSV 会丢失日期和其他复杂列。 - Mikko Ohtamaa
2个回答

4
如果你打算使用Java,你会想要使用Apache POI,但是你可能不想使用常规的UserModel,因为你想要减少内存占用。相反,可以参考BigGridDemo,它展示了如何使用POI编写非常大的xlsx文件,并且大部分工作不在内存中进行。你可能也会发现,在Python中同样可以使用BigGridDemo中使用的技术。

4

如何通过访问行、列和“cell”方法在Optimized writer中编写表格? - user4275254

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接