有时,您需要打开或编写非常大的XLSX文件,而openpyxl中的常用方式将无法处理。幸运的是,有两种模式使您能够以固定或接近固定的内存消耗读取和写入无限的数据量。
简介:class:openpyxl.worksheet._read_only.ReadOnlyWorksheet:
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']
for row in ws.rows:
for cell in row:
print(cell.value)
警告
openpyxl.worksheet._read_only.ReadOnlyWorksheet
是只读的只读模式依赖于创建文件的应用程序和库所提供有关工作表的正确信息,特别是其中已使用部分信息,即尺寸。有些应用程序设置尺寸信息不正确。您可以使用ws.calculate_dimension()
来检查该信息。如果返回一个错误范围,简单地重置max_row和max_column属性就可以使用该文件:
ws.reset_dimensions()
在write- only
模式下,openpyxl.worksheet.worksheet.Worksheet
已被一个更快的替代项替换,:class:openpyxl.worksheet._write_only.WriteOnlyWorksheet
。如果要转储大量数据,请确保已安装lxml
库。
>>> from openpyxl import Workbook
>>> wb = Workbook(write_only=True)
>>> ws = wb.create_sheet()
>>>
>>> # now we'll fill it with 100 rows x 200 columns
>>>
>>> for irow in range(100):
... ws.append(['%d' % i for i in range(200)])
>>> # save the file
>>> wb.save('new_big_file.xlsx')
如果单元格包含样式或注释信息,请使用:func:openpyxl.cell.WriteOnlyCell
>>> from openpyxl import Workbook
>>> wb = Workbook(write_only = True)
>>> ws = wb.create_sheet()
>>> from openpyxl.cell import WriteOnlyCell
>>> from openpyxl.comments import Comment
>>> from openpyxl.styles import Font
>>> 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, None])
>>> wb.save('write_only_file.xlsx')
这将创建一个只有一张工作表的只写工作簿,并附加一个包含3个单元格的行:一个具有自定义字体和注释的文本单元格、一个浮点数单元格和一个空单元格(将被丢弃)。
请注意
create_sheet()
方法来创建工作表。append()
方法来添加行。不能在任意位置使用:func:cell()
或者:func:iter_rows()
方法写入(或读取)单元格。append()
附加到现有工作表时都会引发一个:class:openpyxl.utils.exceptions.WorkbookAlreadySaved
异常。freeze_panes
冻结窗口。