摘要:python操作Excel文件,第三方模块汇总。
前言:本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法。
常见库简介
1.xlrd
xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。
http://xlrd.readthedocs.io/en/latest/
1、xlrd支持.xls,.xlsx文件的读
2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从而节省时间和内存(该方法对.xlsx文件无效)。
3、xlrd.Book对象有一个unload_sheet方法,它将从内存中卸载工作表,由工作表索引或工作表名称指定(该方法对.xlsx文件无效)
2.xlwt
xlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。
https://xlwt.readthedocs.io/en/latest/
1、xlwt支持.xls文件写。
3.xlutils
xlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。
http://xlutils.readthedocs.io/en/latest/
1、xlutils支持.xls文件。
2、支持Excel操作。
4.xlwings
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。
http://docs.xlwings.org/en/stable/index.html
1、xlwings支持.xls读,支持.xlsx文件读写。
2、支持Excel操作。
3、支持VBA。
4、强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。
5.openpyxl
openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。
https://openpyxl.readthedocs.io/en/stable/
1、openpyxl支持.xlsx文件的读写。
2、支持Excel操作。
3、加载大.xlsx文件可以使用read_only模式。
4、写入大.xlsx文件可以使用write_only模式。
6.xlsxwriter
xlsxwriter是一个用于创建Excel .xlsx文件的库。
https://xlsxwriter.readthedocs.io/
1、xlswriter支持.xlsx文件的写。
2、支持VBA。
3、写入大.xlsx文件时使用内存优化模式。
7.win32com
win32com库存在于pywin32中,是一个读写和处理Excel文件的库。
http://pythonexcels.com/python-excel-mini-cookbook/
1、win32com支持.xls,.xlsx文件的读写,支持.xlsx文件的写。
2、支持Excel操作。
8.DataNitro
DataNitro是一个内嵌在Excel中的插件。
https://datanitro.com/docs/
1、DataNitro支持.xls,.xlsx文件的读写。
2、支持Excel操作。
3、支持VBA。
4、收费
9.pandas
pandas通过对Excel文件的读写实现数据输入输出
http://pandas.pydata.org/
1、pandas支持.xls,.xlsx文件的读写。
2、支持只加载每个表的单一工作页。
win | MAC | Py2 | Py3 | .xls | .xlsx | 读 | 写 | 修改 | |
---|---|---|---|---|---|---|---|---|---|
xlrd | √ | √ | √ | √ | √ | √ | √ | χ | χ |
xlwt | √ | √ | √ | √ | √ | χ | χ | √ | √ |
xlutils | √ | √ | √ | √ | √ | χ | χ | χ | √ |
xlwings | √ | √ | √ | √ | √ | √ | √ | √ | √ |
openpyxl | √ | χ | √ | √ | χ | √ | √ | √ | √ |
xlswriter | √ | √ | √ | √ | χ | √ | χ | √ | χ |
win32com | √ | √ | √ | √ | √ | √ | √ | √ | √ |
DataNitro | √ | χ | √ | √ | √ | √ | — | — | — |
pandas | √ | √ | √ | √ | √ | √ | √ | √ | χ |
提醒及注意:
xlutils 仅支持 xls 文件,即2003以下版本;
win32com 与 DataNitro 仅支持 windows 系统;
xlwings 安装成功后,如果运行提示报错“ImportError: no module named win32api”,请再安装 pypiwin32 或者 pywin32 包;
win32com 不是独立的扩展库,而是集成在其他库中,安装 pypiwin32 或者 pywin32 包即可使用;
DataNitro 是 Excel 的插件,安装需到官网下载。
基本功能:
由于设计目的不同,每个模块通常着重于某一方面功能,各有所长。
1.xlwings
可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。
2.openpyxl
简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。
3.pandas
数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。
4.win32com
从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取。
5.xlsxwriter
拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。
6.DataNitro
作为插件内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其他 python 库亦是小事一桩。然而,这是付费插件…
7.xlutils
基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。
读写测试
测试用例
用例1. 读.xls文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例2. 读.xlsx文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例3. 读.xls文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例4. 读.xlsx文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例5. 写.xls文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例6. 写.xlsx文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例7. 写.xls文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例8. 写.xlsx文件的整个表(表有1个分页,页有2000行1200列的整数)。
测试结果
测试模块 | 用例1 | 用例2 | 用例3 | 用例4 | 用例5 | 用例6 | 用例7 | 用例8 |
---|---|---|---|---|---|---|---|---|
xlrd | 5.77 | 98.06 | 1.28 | 19.72 | — | — | — | |
xlwt | — | — | — | — | 20.33 | — | 4.06 | — |
xlwings | 1.57 | 11.91 | 2.01 | 3.09 | — | 44.00 | — | 9.30 |
openpyxl | — | 321.70/0.01 | — | 42.42/0.01 | — | 2109.93/135.5 | — | 31.84/25.0 |
xlsxwriter | — | — | — | — | — | 152.28 | — | 24.09 |
win32com | 0.37 | 10.16 | 0.36 | 2.26 | — | 32.48 | — | 26.78 |
pandas | 32.34 | 553.15 | 1.82 | 22.42 | 34.66 | 40.43 | 6.92 | 8.02 |
注:
1.xlwt和pandas每个工作页最多写入256列,因此测试用例修改为每页有2000行256列的整数.
2.xlutils读写依赖于xlrd和xlwt,不单独测试。
3.openpyxl测试两种模式,一是普通加载写入,二是read_only/write_only模式下的加载写入。
4.DataNitro要收费,且需依托Excel使用,本次不测试。
性能比较
单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。
openpyxl虽然操作Excel的功能强大,但读写性能过于糟糕,尤其是写大表时,会占用大量内存(把我的4G内存用完了),开启read_only和write_only模式后对其性能有大幅提升,尤其是对读的性能提升很大,使其几乎不耗时(0.01秒有点夸张,不过确实是加载上了)。pandas把Excel当作数据读写的容器,为其强大的数据分析服务,因此读写性能表现中规中矩,但其对Excel文件兼容性是最好的,支持读写.xls,.xlsx文件,且支持只读表中单一工作页。同样支持此功能的库还有xlrd,但xlrd只支持读,并不支持写,且性能不突出,需要配合xlutils进行Excel操作,并使用xlwt保存数据,而xlwt只能写入.xls文件(另一个可以写入.xls文件的库是pandas,且这两个写入的Excel文件最多只能有256列,其余库就我目前的了解均只能写入.xlsx文件),性能一般。xlsxwriter功能单一,一般用来创建.xlsx文件,写入性能中庸。win32com拥有最棒的读写性能,但该库存在于pywin32的库中,自身没有完善的文档,使用略吃力。xlwings拥有和win32com不相伯仲的读写性能,强大的转换器可以处理大部分数据类型,包括二维的numpy array和pandas DataFrame,可以轻松搞定数据分析的工作。
综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!
便捷性比较
本测试目前只是针对Excel文件的读写,并未涉及Excel操作,单从读写的便捷性来讲,各库的表现难分上下,但是win32com和xlwings这两个库可以在程序运行时实时在打开的Excel文件中进行操作,实现过程的可视化,其次xlwings的数据结构转换器使其可以快速的为Excel文件添加二维数据结构而不需要在Excel文件中重定位数据的行和列,因此从读写的便捷性来比较,仍是xlwings胜出。
代码示例
最后,附上一些演示代码,大家可自行体会下不同模块的使用。
6.1 xlwings基本代码
1 | import xlwings as xw |
6.2 xlsxwriter基本代码
1 | import xlsxwriter as xw |
6.3 xlutils基本代码import xlrd #读取数据
1 | import xlwt #写入数据 |
6.4 win32com基本代码
1 | import win32com.client as wc |
6.5 openpyxl基本代码
1 | import openpyxl |
6.6 DataNitro基本代码
1 | #单一单元格赋值 |
openpyxl具体使用
1、 创建一个excel 文件,并写入不同类的内容
1 | # -*- coding: utf-8 -*- |
2、创建sheet
1 | from openpyxl import Workbook |
3、操作单元格
1 | # -*- coding: utf-8 -*- |
4、操作已存在的文件
1 | # -*- coding: utf-8 -*- |
5、操作批量的单元格
1 | # -*- coding: utf-8 -*- |
6、获取所有的行(列)对象:
1 | # coding=utf-8 |
7、使用公式
1 | # -*- coding: utf-8 -*- |
8、合并单元格
1 | # -*- coding: utf-8 -*- |
参考文章
https://www.cnblogs.com/zeke-python-road/p/8986318.html
- 本文作者: th3ee9ine
- 本文链接: https://www.blog.ajie39.top/2021/05/05/python之操作Excel模块/
- 版权声明: 本博客所有文章除特别声明外,均采用 LICENSE 下的许可协议。转载请注明出处!