Python中用OpenPyXL处理Excel表格
本文最后更新于:2024年6月17日 下午
前言
这些库都不如
OpenPyXL
强大,
OpenPyXL
即可以读也可以写
Excel 2010+
的
xlsx
xlsm
xltx
xltm
文件。不过,
OpenPyXL
库也是比较吃内存的,大约是原始文件的 50 倍左右。例如,一个 50M 大小的 Excel 文件,需要 2.5G 大小的内存运行。关于以上几个库的性能比对,请移步
OpenPyXL 性能测试
。
安装
1 |
|
openpyxl
在保存 Excel 表格时候会丢失原文件的图片和图表。如果要操作图片,则需要
pillow
库,安装如下:
1 |
|
使用方法
新建 Excel 表格
新建 Excel 表格,默认有一个名为
Sheet
的表格,如下:
1 |
|
打开已有的 Excel 表格
1 |
|
新建/获取 Sheet 表格
1 |
|
1 |
|
1 |
|
若知道 sheet 的名字,可以用如下方式获取 sheet :
1 |
|
也可获取全部 sheet 的名字,遍历 sheet 名字,如下:
1 |
|
也可以定位到相应 sheet 页,[0]为 sheet 页索引,如下:
1 |
|
复制 Sheet 表格
仅能复制
单元格的值
样式
超链接
注释块
等,而
图片
和
表格
等是无法复制的,如下:
1 |
|
操作单元格
由
worksheet
获取单元格,或直接给单元格赋值,如下:
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
因为性能的原因,
Worksheet.iter_cols()
方法不能在只读模式下使用。
1 |
|
因为性能的原因,
Worksheet.columns
方法不能在只读模式下使用。
如果只想从 worksheet 中获取值,可以使用
Worksheet.values
属性,如下:
1 |
|
Worksheet.iter_rows()
和
Worksheet.iter_cols()
方法都可以添加
values_only
参数来达到仅获取值的目的,如下:
1 |
|
保存文件
使用
Workbook.save()
方法保存 workbook,这个方法会不加提示的覆盖原文件,如下:
1 |
|
获取单元格类型
1 |
|
使用公式
1 |
|
合并单元格
1 |
|
插入一个图片
1 |
|
1 |
|
隐藏单元格
1 |
|
优化模式
在处理非常大的
XLSX
文件时,
openpyxl
的常规模式无法处理这种负载。幸运的是,有两种模式可以在(几乎)恒定内存消耗的情况下读写无限量的数据。
只读模式
1 |
|
只写模式
1 |
|
-
与普通工作簿不同,新创建的只写工作簿不包含任何工作表;必须使用
create_sheet()
方法专门创建工作表。 -
在只写的工作簿中,只能使用
append()
添加行。使用cell()
或iter_rows()
在任意位置写(或读)单元格是不可能的。 - 它能够导出无限数量的数据(甚至比 Excel 实际能够处理的更多),同时将内存使用量保持在 10Mb 以下。
插入/删除行/列,移动区域单元格
插入行/列
1 |
|
1 |
|
删除行/列
从第 6 列开始,删除 3 列,即删除 6、7、8 列,如下:
1 |
|
移动区域单元格
1 |
|
1 |
|
使用 Pandas 和 NumPy
详情请移步 Working with Pandas and NumPy
图表
图表由至少一个系列的一个或多个单元格区域数据点组成。更多内容请移步 图表介绍
注释
openpyxl
可读/写注释,但格式信息会被丢失。在
只读模式
下不支持操作注释。注释必须包括
内容
和
作者
。
1 |
|
1 |
|
表格样式
字体样式
字体名称、字体大小、字体颜色、加粗、斜体、纵向对齐方式(有三种:
baseline
,
superscript
,
subscript
)、下划线、删除线,如下:
1 |
|
1 |
|
1 |
|
填充样式
1 |
|
边框样式
1 |
|
对齐样式
1 |
|
保护样式
1 |
|
整行或整列应用样式
1 |
|
更改合并的单元格样式
筛选和排序
1 |
|
生成的 Excel 表格,有筛选排序的操作,但是没有实际表现出效果,如下图:
密码保护
该功能仅能提供一个很基础的密码保护,没有进行加密处理,网上普通的破解软件都可以破解密码。不过,日常使用还是可以的。
该功能仅可用于新建 excel 表格,不能用于已存在的 excel 表格。
workbook 工作薄保护
防止查看隐藏 sheet,避免增加、移动、删除、隐藏或重命名 sheet 等操作,可以保护 workbook 的结构,如下:
1 |
|
worksheet 保护
1 |
|
openpyxl 包文件
微信支付
支付宝