真正的勇士,敢于直面银行卡上的余额,敢于正视磅秤上的数字。
表格数据是最常见的数据类型,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文件
import pathlib
import datetime
from openpyxl import load_workbook
path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/004excel')
in_path = path.joinpath('input.xlsx')
wb = load_workbook(in_path, read_only=True)
for name in wb.sheetnames:
ws = wb[name]
print(f'{name} 表有 {ws.max_row-ws.min_row+1} 行, {ws.max_column-ws.min_column+1} 列.')
读取Excel文件内的数据
import pathlib
import datetime
from openpyxl import load_workbook
path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/004excel')
in_path = path.joinpath('input.xlsx')
wb = load_workbook(in_path)
ws = wb[wb.sheetnames[0]] # 第一个工作表
# 操作单列
for cell in ws["A"]:
print(cell.value)
# 操作单行
for cell in ws["1