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冻结窗口。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343