Python办公自动化之Excel(中)
准备
首先,我们需要安装依赖包
读取数据
使用 openpyxl 中的 load_workbook(filepath) 加载本地一个 excel 文件,返回结果是一个工作簿对象
利用工作簿对象,可以获取所有的 sheet 名称及 sheet 列表
工作簿对象提供了 active 属性,用于快速获取当前选择的 sheet
另外,也可以通过 sheet 名称去获取某一个特定的 sheet 对象
使用 sheet.max_row 和 sheet.max_column 可以获取当前 sheet 中的数据行数和列数
openpyxl 提供 2 种方式来定位一个单元格,分别是:
- 数字索引,从 1 开始
数字索引:行数字索引、列数字索引
比如:row_index=1,column_index=1
- 行和列组成的字符串索引
字符串索引:列由字母组成 + 行索引
比如:a1 对应第一行、第一列的单元格
并且,openpyxl.utils 提供了方法,便于 列索引 在两者之间进行转换
单元格的获取,同样可以通过上面 2 种索引方式来获取
在日常处理 excel 数据过程中,可能需要判断单元格数据类型,而 openpyxl 并没有提供现成的方法
这里,我们可以通过单元格对象的 value 属性拿到值,接着使用 isinstance 方法判断数据类型
单独获取某一行[列]的数据,可以使用下面的方式:
需要注意的是,获取某一行的数据需要传入数字索引;而对于列数据的获取,必须传入字符串索引
和 python 列表范围取值类似,openpyxl 同样支持使用 : 符号拿到某个范围内的数据行[列]
写入数据
要写入数据到 excel 表格
首先,使用 openpyxl.workbook() 创建一个 excel 工作簿对象
接着,使用工作簿对象的 create_sheet() 新建一个 sheet
默认创建的 sheet 被插入到最后一个位置,第 2 个参数可以指定 sheet 插入的位置
sheet 标签的背景色同样支持修改,使用 sheet_properties.tabcolor 指定 rgb 颜色值
比如,要设置某一个 sheet 的背景色为红色,只需要先查询到对应的 sheet,然后指定颜色值为 ff0000 即可
openpyxl 支持行列数字索引、字符串索引以这 2 种方式写入数据到单元格中
在单元格中插入图片也很简单,openpyxl 提供的 add_image() 方法
参数有 2 个,分别是:图片对象、单元格字符串索引
为了便于使用,我们可以将列索引进行转换,然后封装成两个插入图片的方法
最后,调用工作簿对象的 save() 方法,将数据真实写入到 excel 文件中
修改数据
修改数据包含:单元格数据的修改、单元格样式的修改
对于单元格数据的修改,只需要先读取工作簿对象,查询到要操作的 sheet 对象,然后调用上面的方法修改单元格数据,最后调用 save() 函数保存覆盖即可
单元格样式包含:字体样式、单元格背景样式、边框样式、对齐方式等
以常见的字体样式、对齐方式为例
首先,使用 openpyxl 中的 font 类创建一个对象,指定字体名称、字体大小、是否加粗、是否斜体、颜色、下划线等
接着,构建一个 alignment 对象,指定单元格的对齐方式
最后,使用单元格对象的 font/alignment 属性,将字体样式和对齐方式设置进去即可
进阶用法
接下来,聊聊几个常用的进阶用法
1、获取可见及隐藏的 sheet
通过判断 sheet 对象的 sheet_state 属性值,可以判断当前 sheet 是显示还是隐藏
当值为 visible 时,代表 sheet 是显示的
当值是 hidden 时,代表这个 sheet 被隐藏了
2、获取隐藏/显示的行索引列表、列索引列表
受限于篇幅,这里以获取所有显示/隐藏的行索引列表为例
遍历 sheet 对象的 row_dimensions 属性值,通过判断行属性的 hidden 值,判断当前行是否隐藏或显示
3、获取单元格字体颜色及单元格背景颜色
单元格对象的 font.color.rgb、fill.fgcolor.rgb 属性值分别代表字体颜色值、单元格背景颜色
最后
可以发现,openpyxl 相比 xlrd/xlwt,提供了大量实用的 api,功能更强大,并且完美支持 xlsx!
受限于篇幅,文中只展示了部分功能和代码,更加复杂的功能,比如:单元格合并、单元格完整样式操作,我已经封装成方法上传到后台
代码地址:https://github.com/xingag/test_auto/tree/master/office_auto/excel
以上就是python办公自动化之excel(中)的详细内容,更多关于python excel自动化的资料请关注其它相关文章!
上一篇: 活动的生命周期
推荐阅读
-
在Python中操作字符串之startswith()方法的使用
-
在Python中处理字符串之isdecimal()方法的使用
-
在Python中操作列表之List.append()方法的使用
-
在Python中操作列表之list.extend()方法的使用
-
《Python之禅》中对于Python编程过程中的一些建议
-
荐 Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)
-
Python读取txt内容写入xls格式excel中的方法
-
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
-
Python3中编码与解码之Unicode与bytes的讲解
-
使用Python和xlwt向Excel文件中写入中文的实例