5

我必须编写一个巨大的 Excel 文件,而我需要的是 openpyxl 中的优化编写器。

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

预先感谢您的帮助!

4

4 回答 4

6

由于我无法发表评论,因此我将在此处发布对 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")

希望能帮助到你

于 2017-09-14T10:06:46.007 回答
4

您还可以查看XlsxWriter模块,该模块允许在优化模式下使用格式化写入大文件。

from xlsxwriter.workbook import Workbook

workbook = Workbook('file.xlsx', {'constant_memory': True})
worksheet = workbook.add_worksheet()
...
于 2013-05-17T22:47:37.923 回答
1

引用自文档:

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

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

但是,看看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')

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

希望有帮助。

于 2013-05-17T19:32:15.200 回答
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")

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

于 2015-03-10T17:12:27.323 回答