Python 处理 Excel 文件的实用姿势
真正的勇士,敢于直面银行卡上的余额,敢于正视磅秤上的数字。
表格数据是最常见的数据类型,Excel是日常办公中最常接触的文件。
上一章提过Python可以通过openpyxl
模块处理Excel文件。
其实Python处理Excel的三方模块主要有这几个:
xlrd
、xlwt
和xlutils
,支持读写Excel文件。openpyxl
,支持读写和修改OpenXML格式的Excel文件。xlswriter
,支持写文件,以及更多Excel功能特性。pandas
,底层依赖xlrd
和xlwt
读写Excel文件,处理数据神器。pywin32
,调用Win32 API操作文件,只适用于Windows。xlwings
,可理解为pywin32
的多平台加强版,有商业版支持。
简单做个对比分析:
第1类中3个模块,属于同一作者的开源项目,目前已停更,不建议直接使用。
pywin32
和xlwings
基于原生Excel软件提供服务,需提前安装软件,读写性能和功能最佳,xlwings
还有商业版本支持。pandas
侧重数据分析,Excel文件读写只是其数据输入和输出部分。openpyxl
不需要依赖Excel功能,直接读写OpenXML内容,兼容性好。xlswriter
侧重写Excel文件,支持VBA等更多特性。
建议的使用场景:
如果企业内大量使用Excel,并用了很多如VBA宏的特性,建议用xlwings。一方面功能全,另一方面可以采买商业付费版支持。
对于普通Excel文件自动处理,建议用
openpyxl
,大部分情况下够用。GB级以下的数据分析,建议用
pandas
,后续会单独出一个数据分析系列来介绍它。
本文重点介绍openpyxl
的使用,它足够应付大部分人日常的表格自动化处理场景。
日常处理Excel文件,最常见的应用场景有3类:
读写Excel文件
合并、分割文档数据
报表自动化,批量生成图表
模块安装:pip install openpyxl
基本使用
Excel表格文件中主要元素有这几个:
sheet(工作表):一个Excel文件可以有多个sheet。
row/col(行和列),
iter_rows()
和iter_cols()
可以返回所有行和列。cell(单元格):和Excel一样用
sheet['A1']
表示,注意行列都以1开始。formulae(公式):可以为单元格设置计算公式,和Excel概念一致。
charts(图表):比如饼图、柱状图等。
style(样式):支持自定义样式,以及条件格式化等。
image(图片),支持
pillow
的图像处理。
打开Excel文件
读取Excel文件内的数据
创建Excel文件
设置单元格样式
单元格样式可以用NumberFormat(数据格式)、Alignment(对齐)、Font(字体)、Border(边框)、PatternFill(填充)、Protection(保护)等来设置。
也可以通过NamedStyle
自定义样式,重复应用到单元格。
此外,通过row_dimensions
和column_dimensions
可以设置整行/整列的样式。
合并单元格
合并单元格:
merge_cells()
解除合并:
unmerge_cells()
注意:对于没有合并过单元格的位置调用unmerge_cells()
会出错;此外合并的单元格顺序是从左上角到右下角。
图表和公式应用
openpyxl
支持的图表都在openpyxl.chart
包中,比如直方图、饼图、折线图等。
可以直接把单元格的值设置为公式,在Excel软件中可以获得结果,但openpyxl
并不支持公式的计算。
如果生成的xlsx
文件被Excel软件打开过,这时公式的计算结果会缓存在文件中,这时用openpyxl
打开文件时候,增加一个data_only=True
参数,也可以读取到计算结果。
插入图像
openpyxl
的图像处理基于PIL.Image
。
PIL.Image
的宽和高单位默认使用Pixel(像素),如果需要映射到Excel中的位置,可以用pixels_to_EMU()
转换。
总结
本文主要介绍了使用openpyxl
模块处理Excel文件,包括基本的Excel文件读写、单元格样式处理、图表生成和图像结合等。
用Excel应对日常工作中的小规模数据足以。
比如实践应用中有一个“多门店加盟品牌数据统计”的案例,其中正好用到了上面的各项知识点。
案例说明:
以
Python
和openpyxl
应用实践为主。提供解决问题思路,实战中可直接应用。
后续“数据分析专题”会介绍
Pandas
等数据分析工具,一个实战应用更灵活的模块。
想了解的可以入群获取,前100名免费。
版权声明: 本文为 InfoQ 作者【程一初】的原创文章。
原文链接:【http://xie.infoq.cn/article/78c3dd00efd7bff9f7c35441f】。文章转载请联系作者。
评论