openpyxl 是用于读取和写入 Excel 2010 xlsx / xlsm / xltx / xltm 文件的 Python 库。
安装openpyxl模块方法:打开cmd窗口,然后输入
pip install openpyxl
即可。第一章 简介
1.1 关于初学Excel自动化的思路
项目背景:本人从事手机芯片低功耗测试工作,每天会产生大量Excel文件需要处理并汇总。例如我需要测试30个应用使用场景下的手机功耗表现,通过自研工具测试每个应用会产生一个功耗波形文件和功耗数据Excel文件,文件命名规范为:手机名_测试场景_应用名_测试时间.xlsx ,我要将Excel文件内数据复制粘贴到一个汇总表中,汇总表中每一项的数据标题为应用名。
思路:
首先你需要将Excel文件所在路径改成当前工作路径
os.chdir()
,然后读取路径中的Excel文件,生成一个待处理文件名列表。(有时候需要筛选,可能当前路径有其他文件);然后你要先创建一个汇总表,再for循环遍历待处理文件名列表,每个文件名先用字符串分割方法获取应用名作为数据的标题,在打开对应的Excel,读取里面的值,然后放入到汇总表中,最后保存汇总表。1.2Excel基本对象介绍
很多同学在网上搜教程的时候,对下面属性不了解的会带来一定困扰。
对象 | 翻译 | 简写 |
workbook | 工作簿 | wb |
worksheet | 工作表 | ws |
cell | 单元格 | cell |
row | 行 | row |
column | 列 | col |
1.2 操作Excel的基本思路
- 用openpyxl.load_workbook()/openpyxl.Workbook()新建/加载Excel文件
- 用wb.worksheets[index]等指定活动工作表(计算机逻辑中,不指定没法进一步获取工作表的信息)
- 用sheet.cell(row,column).value等读取/写入表格数据或其他操作
第二章 读取Excel文件
2.1 对给定路径下的文件筛选xlsx文件
可能你要处理的Excel所在路径还有其他格式的文件,那么就需要对给定路径下的文件进行筛选。如果对目录中的文件不知道如何筛选,那么后面的教程对你来说也是空中楼阁,详细请看之前内容:文件和目录
- filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
- endswith(suffix[, start[, end]]) 函数用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置
2.2 打开/新建/保存Excel工作簿
自动化第一步就是打开/新建文件,即创建一个workbook对象,要么打开已存在的需要处理数据的Excel文件,要么新建一个空白文件做汇总。
- 打开:openpyxl.load_workbook(filename,data_only = False/True)
注:data_only = True/False (参数可选,如果读取带公式的单元格的话)True:读取单元格公式计算值 False:读取单元格公式(默认参数为False)
- 新建:openpyxl.Workbook()
2.3 指定活动工作表
依据2.2创建了一个workbook对象之后,并不能直接对单元格进行读取等操作,还需要创建一个worksheet对象,指定活动工作表。工作簿包含多个多个工作表,你要告诉计算机指定读取哪张工作表才可以。在这里,小编总结了三种方式。
上面方法涉及到工作表名获取,工作表的索引获取,现在来看如何获取工作表的信息
1.4 单元格读取
有了 Worksheet 对象后,就可以按名字访问 Cell 对象。
cell对象的四个属性:value属性(单元格保存的值)row属性(所在行,为整数数字)column属性(所在列,为字母)coordinate属性(所在行列,如第一个单元格为“A1”)
1.5 行、列 读取值
可以通过切片方法访问工作表的一(数)行/列,或一个巨型区域所有Cell对象。再通过循环遍历里面所有单元格。
第二章 编辑Excel文件
2.1 工作表操作
1、新建工作表 (两参数都为可选)
2.2 单元格操作
1、单个单元格写入
2、移动指定范围数据
3、插入空白行
4、删除行/列
5、指定范围写入值
在Excel中,列是用字母表示的,但是在代码中,如果表示列,可以用数字,A列就是第一列,可以用数字1表示。
2、按行追加数据append()
apend()方法是按行向Excel中追加数据,从当前行的下一行开始追加。默认从第1行开始,如果想要从指定的行开始需要通过sheet._current_row =row_num设置