2014-03-13 47 views
4

我需要在PYTHON中使用openpyxl提供一些帮助。我一直很成功地使用xlwt,但是现在我有一些包含超过65,000行的文件(在MySQL Workbench中)。我知道我可以创建一个CSV文件,但是XLSX是首选输出。我能够使用openpyxl创建工作簿,但是我没有成功将MySQL数据放入表中。使用xlwt的程序的主要部分非常简单(见下文)。我似乎无法弄清楚如何使用openpyxl来做同样的事情。我尝试了许多不同的组合和解决方案。我只是在“for x in result:”之后卡住了。使用xlwt vs openpyxl

file_dest = "c:\home\test.xls" 
result = dest.execute("select a, b, c, d from filea) 
for x in result: 
    rw = rw + 1 
    sheet1 = book.add.sheet('Sheet 1') 
    row1 = sheet1.row(rw) 
    row1.write(1,x[0]) 
    row1.write(1,x[1]) 
    row1.write(1,x[2]) 
    row1.write(1,x[3]) 
book.save(file_dest) 
+1

它看起来并不像代码你引用的是'x lwt'代码。我发现你不可能为结果集中的每一行创建一个新的表格,并且在任何情况下语法都不是'book.add.sheet'。但假设你实际运行的* actual *代码确实成功的使用了'xlwt',那么你最好使用'xlsxwriter'而不是'openpyxl',因为'xlsxwriter'的编程接口更接近' xlwt'。 –

回答

1

一个小例子:

wb = Workbook(encoding='utf-8') 
ws = wb.worksheets[0] 
row = 2 
ws.title = "Report" 
ws.cell('A1').value = "Value" 
ws.cell('B1').value = "Note" 
for item in results: 
    ws.cell('A%d' % (row)).value = item[0] 
    ws.cell('B%d' % (row)).value = item[1] 
    row += 1 

http://pythonhosted.org//openpyxl/

+0

SILWESTPL - 尝试了这个解决方案,它的工作原理 - 大部分都是这样。我有几个非常大的文件(+800,000条记录),需要很长时间才能完成。较小的文件(+100,000)似乎处理速度更快一些。 – geetarman

+0

对于只希望转储数据的非常大的文件,则会有一个'Workbook(optimized_write = True)'标志,以便将数据直接写入Excel文件。否则,所有东西都被转换成Python对象并保存在内存中进行操作。对于纯粹的速度,只写'xlsxwriter'有边缘。 –

2

这是一个很好的用例使用append()

Appends a group of values at the bottom of the current sheet.

If it’s a list: all values are added in order, starting from the first column

import openpyxl 

file_dest = "test.xlsx" 

workbook = openpyxl.Workbook() 
worksheet = workbook.get_active_sheet() 

result = dest.execute("select a, b, c, d from filea") 
for x in result: 
    worksheet.append(list(x)) 

workbook.save(file_dest) 
+0

ALECXE - 尝试了此解决方案,但收到错误消息“TypeError:list_or_dict必须是列表或字典”。 – geetarman

+0

@geetarman更新了答案。 – alecxe