Python 使用openpyxl中的优化编写器设置单元格格式和样式

Python 使用openpyxl中的优化编写器设置单元格格式和样式,python,openpyxl,Python,Openpyxl,我必须写一个巨大的Excel文件,openpyxl中的文件就是我所需要的 问题是: 使用优化的writer时是否可以设置单元格的样式和格式?样式不是很重要(我只想突出显示列标题),但对于某些包含货币值的列,我需要正确的数字格式。 我看到当使用优化的writer时,ws.cell()方法是不可用的,那么怎么做呢 提前感谢您的帮助 从文档中引用: 那些工作表只有一个append()方法,不可能 直接访问独立单元格(通过cell()或range())。他们 我们只写 当您将optimized\u wr

我必须写一个巨大的Excel文件,openpyxl中的文件就是我所需要的

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

提前感谢您的帮助

从文档中引用:

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

当您将
optimized\u write=True
传递给
工作簿
构造函数时,openpyxl将使用
转储工作表
类而不是
工作表
<代码>转储工作表类在样式和格式方面非常有限

但是,看看方法——它与传递给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')
说到更改列标题样式-只是无法使用优化的编写器


希望对您有所帮助。

您还可以查看该模块,该模块允许在中写入大型文件


您可以使用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")

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

由于我不能发表评论,我将在此处发布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")

希望对您有所帮助

感谢您提供如此出色的模块!是否有任何性能基准,openpyxl与
optimized_write=True
相比,xlsxwriter与
constant_memory=True
?这些家伙在他们的PyExcellate、xlsxwriter和openpyxl中都有一个基准。谢谢分享。PyExcellate在速度方面看起来很有希望,但没有其他东西:没有单元格格式、页面设置等。希望xlsxwriter在未来的版本中会更快。谢谢,xlsxwriter看起来正是我需要的!
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")