在openpyxl中使用Optimized Writer设置单元格格式和样式

时间:2013-05-17 11:36:43

标签: python openpyxl

我要写一个巨大的Excel文件,openpyxl中的optimized writer就是我需要的。

问题是: 使用优化的编写器时,是否可以设置单元格的样式和格式?样式不是那么重要(我只想突出列标题),但我需要一些包含货币值的列的正确数字格式。 我看到使用优化编写器时ws.cell()方法不可用,那么怎么做呢?

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

您还可以查看XlsxWriter模块,该模块允许使用optimised modeformatting中编写大文件。

from xlsxwriter.workbook import Workbook

workbook = Workbook('file.xlsx', {'constant_memory': True})
worksheet = workbook.add_worksheet()
...

答案 1 :(得分:3)

由于我无法发表评论,我将向Dean发布更新答案:

openpyxl的api(版本2.4.7)稍有改动,现在应该是:

from openpyxl import Workbook
wb = Workbook( write_only = True )
ws = wb.create_sheet()

from openpyxl.writer.dump_worksheet import WriteOnlyCell
from openpyxl.styles import Font

cell = WriteOnlyCell(ws, value="highlight")
cell.font = Font(name='Courier', size=36)

cols=[]
cols.append(cell)
cols.append("some other value")
ws.append(cols)
wb.save("test.xlsx")

希望有所帮助

答案 2 :(得分:1)

来自docs的引用:

  

这些工作表只有一个append()方法,这是不可能的   直接访问独立单元格(通过cell()或range())。他们   是只写的。

当您将optimized_write=True传递给Workbook构造函数时,openpyxl将使用DumpWorksheet类而不是WorksheetDumpWorksheet类在样式和格式方面非常有限。

但是,看看append方法 - 它匹配你传递给excel类型的python类型的数据。因此,运行此命令后,请在结果文件中查看正确的单元格格式:

import datetime
from openpyxl import Workbook

wb = Workbook(optimized_write=True)
ws = wb.create_sheet()

for irow in xrange(5):
    ws.append([True, datetime.datetime.now(), 'test', 1, 1.25, '=D1+E1'])

wb.save('output.xlsx')

谈到改变列标题样式 - 使用优化的编写器无法做到这一点。

希望有所帮助。

答案 3 :(得分:1)

您可以使用WriteOnlyCell执行此操作。

from openpyxl import Workbook
wb = Workbook(optimized_write = True)
ws = wb.create_sheet()
from openpyxl.writer.dump_worksheet import WriteOnlyCell
from openpyxl.styles import Style, Font, PatternFill
cell = WriteOnlyCell(ws, value="highlight")
cell.style = Style(font=Font(name='Courier', size=36), fill=PatternFill(fill_type='solid',start_color='8557e5'))
cols=[]
cols.append(cell)
cols.append("some other value")
ws.append(cols)
wb.save("test.xlsx")

我希望这会有所帮助。在将其附加到工作表的行之前,您可以使用该样式允许的任何内容。