首页 > 其他分享 >关于openpyxl

关于openpyxl

时间:2024-04-16 13:11:58浏览次数:21  
标签:write openpyxl cell only ws 关于 wb

文档来源于openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/tutorial.html

python内封装了很多强大的功能库,包括对office办公软件的许多操作,相比较于对word的操作库来说,python对excel表格的操作库要友好很多,其中广为人知的当属于pandas和openpyxl。

我在对excel表操作时注意到,对于一个较大的excel表的操作,在相同环境下使用pandas和openpyxl的运行时间是不一样的,终于在openpyxl官方文档中找到:

openpyxl attempts to balance functionality and performance. Where in doubt, we have focused on functionality over optimisation: performance tweaks are easier once an API has been established. Memory use is fairly high in comparison with other libraries and applications and is approximately 50 times the original file size, e.g. 2.5 GB for a 50 MB Excel file. As many use cases involve either only reading or writing files, the Optimised Modes modes mean this is less of a problem.

翻译过来就是:
openpyxl尝试平衡性能和功能。毫无疑问, 我们更关注功能的实现: 一旦API建立 性能的优化就更加容易. 与其他库和应用程序相比,openpyxl内存的使用量大约是原始文件的50倍 例如 50 MB Excel 文件的内存使用量为 2.5 GB。由于许多用例只涉及读取或写入文件,使用优化模式可以很好的解决这个问题

那如果excel表很大,而我们又不得不使用openpyxl对excel表进行操作,应该怎么办呢?
官方文档中给出了对应的优化模式

  1. 只读模式

有时,你需要打开或写入非常大的 XLSX 文件,并且 openpyxl 中的通用例程将无法处理该负载。但是,有两种模式使你能够读取和写入无限量的数据,并且内存消耗变化不大。

推荐使用 openpyxl.worksheet._read_only.ReadOnlyWorksheet:

from openpyxl import load_workbookwb = 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)
  1. 写入模式

    同样,常规的openpyxl.worksheet.worksheet.Worksheet方法已经被更快的 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)])>>> # 保存文件>>> wb.save('new_big_file.xlsx') # doctest: +SKIP

如果想使写入的单元格具有样式或者注释,请使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')

这将创建一个仅允许写入(write-only)的工作簿(workbook), 并且添加一行,这行仅包含三个单元格: 一个带有自定义字体和注释的文本单元格,一个浮点数, 和一个空单元格 (无论如何都会被丢弃)。

警告:

  • 与普通工作簿不同,新创建的仅写(write-only)工作簿不包含任何工作表; 工作表必须使用 create_sheet()方法专门创建。
  • 在仅允许写入(write-only)的工作簿中,只能用 append(). 添加行。不能用 cell() 或 iter_rows()在任意位置写入 (或读取) 单元格。
  • 它能够导出近乎无限数量的数据 (甚至超过 Excel 实际处理的数据),同时将内存使用量保持在 10Mb 以下。
  • 仅写(write-only)工作簿只能保存一次。之后,每次尝试将工作簿或 append () 保存到现有工作表时,都会引发openpyxl.utils.exceptions.WorkbookAlreadySaved 异常。
  • Everything that appears in the file before the actual cell data must be created before cells are added because it must written to the file before then. For example, freeze_panes should be set before cells are added.

标签:write,openpyxl,cell,only,ws,关于,wb
From: https://www.cnblogs.com/zjw-lxj/p/18137862

相关文章

  • 关于内存泄漏和代码优化
    最近在用selenium对网页上的数据进行爬取时发现,通过pyinstaller打包成的.exe文件运行时速度越来越慢,通过查找任务管理器里的句柄数,发现可能存在内存泄漏的原因,记录一下关于内存泄漏的处理方法和代码优化1.内存泄漏如果您怀疑代码可能存在内存泄漏,可以尝试跟踪内存分配:这里我用......
  • 【转】关于微信公众号-网页授权域名,域名配置个数不够用的情况梳理
    原文:https://blog.csdn.net/weixin_44050791/article/details/132095710关于微信公众号-网页授权域名,域名配置个数不够用的情况梳理1.网页授权机制如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑2.去微信后台配置......
  • WinPE中关于WIM映像文件的解压与压缩
    本文承接上文:给WinPE添加、更新、删除内置的程序本文转自PECMD技术社区:原文链接作者:caocaofff制作出Win10PE的ISO之后,我们一定会有修改的需求,修改WinPE的内容一般都是对WIM文件内容进行修改,下面简单说明一下如何解压WIM文件,并且在修改后如何压缩成WIM文件。我们先准备一个......
  • 一道变态的关于作用域的探究问题
    varx=1functionfoo(x=11,y=function(){x=2}){console.log(x)//打印的()的形参x因为默认值为11所以打印11y()//y函数执行修改的是foo括号里面形参的值console.log(x)//由于()中的x被y函数修改所以x值变为2x......
  • 关于mac使用figma以及企业微信3.1.18版本,CPU系统占用率飙升至70%
    问题描述使用一段时间正常,不知道是修改了什么设置,还是有什么软件冲突,导致cpu使用率极高系统进程中有一个kernel_task占用了大量的cpu并且该占用并不会消失,只要figma打开就会一直占用企业微信3.1.18也会导致该问题=>企业微信3.1.16之后版本总是会启用独立显卡,导致电......
  • 关于规则制度的思考 - Inspired by soccer match
    Beforeyouread现在您看到的这篇文章,以防您不知道,是我的个人博客,一个大网站的独立分枝,从其他地方无法点进来。不同于微博、知乎,该站不是拥有多个客户端推广的社交媒体。如果我没有给您分享链接,您是几乎不可能找到这个网页的。全文仅记录个人想法,没有任何哗众取宠、散播污名。......
  • 关于ITIL/ITSM研发的误区
    1:轻视到目前为止,很多人都认为ITSM有啥研发难度的,招几个码农,搞一套工作流封装一下,甚至直接上低代码,仿佛一套实用的ITSM就唾手可得其实扯淡了,无数公司都去搞这个,然后发现不成功,不好用,不实用,无法落地,无法执行....好像业务头头是道,技术也是分分钟就成,唯独结果不太满意......
  • 关于中文、字符互转
    序知周所众在计算机中,所有的数据在存储和运算时都要使用二进制数表示例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示于是就产生了编码而我国字符编码也有几套标准,如GB2312、GBK、GB18030等脑......
  • 关于求阶乘逆元
    以下思路背景均来自题目牡牛和牝牛预处理做法众所周知:\[C_n^m=\frac{n!}{m!(n-m)!}\]众所周知知:c++中除法很不稳定,所以需要逆元。所以真正在运用时,我们的函数会这么写:intC(inta,intb){ if(a<b) return0; returnjc[a]*ny[b]%mod*ny[a-b]%mod;}啊哦忘说要......
  • 关于PHP编码的选用
    半知半觉地到了老而不肖的年纪,过往点滴,是有那么十数件要么心亏,要么愤慨,要么算了,要么绮望...诸等反复嚼陈的,选专业就是其一,写码刮不出水链会叹基础差,好多概念糊涂不清,要是有在计算机系挨过,是否捉窘就能少一些呢。说起文件编码,打从业就没怎么关注过,乱码吗?用记事本打开二进制文件就......