【发布时间】:2020-03-08 14:25:14
【问题描述】:
我正在创建大约 100,000 行的工作表,而 openpyxl 的写入操作很慢。获取行对象并填充它会很有用,但我找不到用于此的 API。 documentation on optimization 提到只写模式。我对这种模式的问题是它显然不支持合并单元格,因为合并单元格似乎是在电子表格上完成的操作,而不是在附加的行上。
from openpyxl import Workbook
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment
from openpyxl.styles import Font
wb = Workbook(write_only = True)
ws = wb.create_sheet()
cell = WriteOnlyCell(ws, value="hello world")
cell.font = Font(name='Courier', size=36)
cell.comment = Comment(text="A comment", author="Author's Name")
ws.append([cell, 3.14, "foo","bar",None])
ws.append(["merged cells"])
ws.merge_cells(start_row=2,end_row=2,start_column=1,end_column=5)
wb.save('write_only_file.xlsx')
% python cm.py
Traceback (most recent call last):
File "cm.py", line 12, in <module>
ws.merge_cells(start_row=2,end_row=2,start_column=1,end_column=5)
AttributeError: 'WriteOnlyWorksheet' object has no attribute 'merge_cells'
有没有办法支持合并单元格?如果做不到这一点,有什么比使用ws.cell() 获取每个单元格并手动设置它更快的方法来编写单元格?
【问题讨论】:
-
合并单元格至少在我看来还没有完成!它肯定会在以后产生问题。话虽如此,如果您使用 xlwings 而不是 openpyxl 并检查它的 API 属性,您将能够使用数组与 excel 进行更清洁的交互,从而一次性填充单元格的范围对象。
-
您可以将
.merge_cells替换为.merged_cells.add(cell_range)。 注意:整个merge的内容取决于版本,在repl.it 上使用3.03进行测试 -
@stovfl —
cell_range是什么? -
@JvdV — 谢谢,我不知道 xlwings。我去看看。
-
@vy32 “什么是 cell_range?”:查看给定的链接。