2014-03-13 86 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