openpyxl3.0官方文档(4)——只读和只写两种优化模式

只读模式¶

有时,您需要打开或编写非常大的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)
    

警告

  • :class:openpyxl.worksheet._read_only.ReadOnlyWorksheet是只读的
    返回的单元格类型不是:class:openpyxl.cell.cell.Cell,而是:class:openpyxl.cell._read_only.ReadOnlyCell。
工作表尺寸¶

只读模式依赖于创建文件的应用程序和库所提供有关工作表的正确信息,特别是其中已使用部分信息,即尺寸。有些应用程序设置尺寸信息不正确。您可以使用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个单元格的行:一个具有自定义字体和注释的文本单元格、一个浮点数单元格和一个空单元格(将被丢弃)。
请注意

  • 与普通工作簿不同,新创建的只写工作簿不包含任何工作表;必须使用:func:create_sheet()方法来创建工作表。
  • 在只写工作簿中,只能使用以下:func:append()方法来添加行。不能在任意位置使用:func:cell()或者:func:iter_rows()方法写入(或读取)单元格。
  • 它可以导出无限量的数据(甚至超过Excel的实际处理能力),同时将内存使用量控制在10Mb以下。
  • 只写工作簿只能保存一次。之后,每次尝试保存工作簿或使用append()附加到现有工作表时都会引发一个:class:openpyxl.utils.exceptions.WorkbookAlreadySaved异常。
  • 在单元格数据之前出现在文件中的所有内容都必须在添加单元格之前创建,因为它必须在单元格之前写入文件。例如,应在添加单元格之前设置freeze_panes冻结窗口。

你可能感兴趣的:(python,python,openpyxl,excel)