学习了Python 打开和读取 Excel 表格内容、Python 编辑 Excel 表格以及Python 批量调整 Excel 表格中字体和样式之后,做一个小案例。
更多Python相关文章点击:Python学习日志目录
这个案例是对一个Excel文档进行下面处理:
打开这个Excel文档,找到 day 列在2014年以后,buy_mount 列大于5的数据;
删除其他行的数据,中间不要留空行
将 buy_mount 中大于10的数据行背景标红,字体改为白色,并保存。
编程思路:
首先查找表头(第一行)中day和buy_mount的列;
然后按行循环,先判断day所在列数据是否大于等于20140101;
同时判断buy_mount所在列的数值是否大于5,保存行号到列表;
同时找出 buy_mount 大于10的行号,按照要求修改;
然后倒序,删除;
保存文档。
from openpyxl import load_workbook from openpyxl.styles import PatternFill,Font e_xlsx = load_workbook('demo.xlsx') s1 = e_xlsx.active for first_cell in s1[1]: if first_cell.value == 'day': day_col = first_cell.column elif first_cell.value == 'buy_mount': buy_mount_col = first_cell.column red = PatternFill(fill_type = 'solid',fgColor = 'ff0000') white = Font(color = 'ffffff') row_max = s1.max_row data_list = [1] for row_id in range(2,row_max): day_value = s1.cell(row_id,day_col).value buy_mount_value = s1.cell(row_id,buy_mount_col).value if type(day_value) is int and type(buy_mount_value) is int: if day_value >= 20140101 and buy_mount_value > 5: data_list.append(row_id) if buy_mount_value > 10: rows = s1[row_id] for cell_x in rows: cell_x.fill = red cell_x.font = white row_end = row_max + 1 for row_x in data_list[::-1]: s1.delete_rows(row_x+1,row_end-row_x-1) print(f'已删除{row_x+1,row_end-row_x-1}') row_end = row_x print(s1.dimensions) e_xlsx.save('demo.xlsx')
其实我们还有一种思路,就是一边判断数据是否符合要求,如果不符合就删除。但是这样存在一个问题,就是在删除之后,下面的行号就会发生变化,所以我们循环读取的时候,行号和总行数要注意在删除一行之后减1。
from openpyxl import load_workbook from openpyxl.styles import PatternFill,Font e_xlsx = load_workbook('demo.xlsx') s1 = e_xlsx.active for first_cell in s1[1]: if first_cell.value == 'day': day_col = first_cell.column elif first_cell.value == 'buy_mount': buy_mount_col = first_cell.column red = PatternFill(fill_type = 'solid',fgColor = 'ff0000') white = Font(color = 'ffffff') row_max = s1.max_row row_id = 1 while row_id < row_max: row_id += 1 day_value = s1.cell(row_id,day_col).value buy_mount_value = s1.cell(row_id,buy_mount_col).value if type(day_value) is int and type(buy_mount_value) is int and day_value >= 20140101 and buy_mount_value > 5: if buy_mount_value > 10: rows = s1[row_id] for cell_x in rows: cell_x.fill = red cell_x.font = white else: s1.delete_rows(row_id,1) row_id -= 1 row_max -= 1 print(s1.dimensions) e_xlsx.save('demo.xlsx')
上一篇:案例:用 Python 把最近三个月未修改过的文件进行压缩备份
- 相关文章 -
Python 数字与数字型运算 - 2020-09-08
Python 基础知识之数据类型 - 2020-09-07
Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07
Python 基础知识之变量 - 2020-09-03
Python 详细安装步骤图解 - 2020-09-01
Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09
Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05
Python 数据分析第三方库 Numpy 的安装和使用 - 2020-02-03
- 文章评论 -
- 最新评论[0条评论] -
版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 |
逍遥峡谷 ·
酷品优选
Copyright©Interstellar Central Occult Agency (I.C.O.A)
本局纯属虚构,如有雷同,纯属巧合