python自动化办公(第9课)批量调整Excel中字体、样式
python自动化办公(第9课)批量调整Excel中字体、样式
- 修改字体样式
- Font(name=“字体名”,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)
from openpyxl.styles import Font
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
cell = sheet["A1"]
font = Font(name="隶书",size=12,bold=True,italic=True,color="59A869")
cell.font = font
workbook.save(filename="新建表.xlsx")
- 注意styles后面有s
- 注意Font首字母大写
- 获取表格中字体的样式
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
cell = sheet["A1"]
font = cell.font
print(font.name,font.size,font.bold,font.italic)
隶书 12.0 True True
- 设置对齐样式
- Alignment(horizontal=水平对齐,vertical=垂直对齐,text_rotation=旋转角度,wrap_text=是否自动换行)
from openpyxl.styles import Alignment
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
cell = sheet["A1"]
alignment = Alignment(horizontal="center",vertical="center",text_rotation=45,wrap_text=True)
cell.alignment = alignment
workbook.save(filename="新建表.xlsx")
- 水平对齐:“distributed”,“justify”,“center”,“left”,“fill”,“centerContinuous”,“right”,“general”
- 垂直对齐:“bottom”,“distributed”,“justify”,“center”,“top”
- 设置边框样式
- Side(style=边线样式,color=边线颜色)
- Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
from openpyxl.styles import Side,Border
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
cell = sheet["C2"]
side_left = Side(style="thin",color="0277D9") #蓝色
side_right = Side(style="dotted",color="EE3131") #红色
border = Border(left=side_left,right=side_right,top=side_left,bottom=side_right)
cell.border = border
workbook.save(filename="新建表.xlsx")
颜色只能是16进制的颜色名
注意首字母大小写
边线样式:“double”,“dotted”,“hair”,“dashed”,“dashDot”,“thin”,“medium”,“thick”
- 设置填充样式
- PatternFill(fill_type=填充样式,fgColor=填充颜色)
- GradientFill(stop=(渐变颜色1,渐变颜色2,…))
from openpyxl.styles import PatternFill,GradientFill
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.activecell_1 = sheet["A3"]
cell_2 = sheet["A4"]pattern_fill = PatternFill(fill_type="solid",fgColor="6C91FC")
gradient_fill = GradientFill(stop=("FFFFFF","3E7AAB","1A1A1A"))cell_1.fill = pattern_fill
cell_2.fill = gradient_fill
workbook.save(filename="新建表.xlsx")
- 注意fgColor中C要大写
- 设置好填充样式,再赋值到格子的fill属性中
- 设置行高和列宽
- .row_dimensions[行编号].height = 行高
- .column_dimensions[列编号].width = 列宽
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
sheet.row_dimensions[6].height = 50
sheet.column_dimensions["A"].width = 20
workbook.save(filename="新建表.xlsx")
- 注意A列中的字母A要加双引号
- 合并单元格
- .merge_cells(待合并的格子编号)
- .merage_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
sheet.merge_cells("D1:E2")
sheet.merge_cells(start_row=4,start_column=4,end_row=5,end_column=5)
workbook.save(filename="新建表.xlsx")
- 取消单元格合并
- .unmerge_cells(待取消合并格子编号)
- .unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbook
workbook = load_workbook(filename="新建表.xlsx")
sheet = workbook.active
sheet.unmerge_cells("D1:E2")
sheet.unmerge_cells(start_row=4,start_column=4,end_row=5,end_column=5)
workbook.save(filename="新建表.xlsx")
作业:编写python程序,要求如下:
- 打开阿里云天池电商婴儿用户数证.xlsx
- 找到day在2014年以后,buy_mount中大于5的数据
- 将其他数据行删除掉,最后不要在中间留空行
- 将buy_mount中大于等于10的数据行背景颜色标为红色,字体标为白色
- 保存该Excel文件
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.styles import Font# 设置查找表头所在列号函数
def search_col(col_name):workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")sheet = workbook.activefor cell in sheet[1]:if cell.value == col_name:return(cell.column)# 没有对表进行修改,不需要workbook.save# 设置删除行函数
def delete_row():workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")sheet = workbook.activefor cell in sheet["A"]:if cell.value == "待删除":sheet.delete_rows(idx=cell.row)workbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")# 对表进行了修改,需要workbook.save# 设置筛选出2014年之后的数据行,其余待删除
def search_col_value(num):workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")sheet = workbook.active# range为左闭右开区间,从第2行一直遍历到1001行for r in range(2,1002):cell = sheet.cell(row=r, column=num)# cell.value是int型,转为str型用字符串切片的方法把value中年份取出来,再转为整形和2014比较大小if cell.value !=None:if int(str(cell.value)[0:4]) > 2014:continueelse:# 2014年以前的行删掉re_cell = sheet.cell(row=r, column=1)re_cell.value = "待删除"else:# value为空时默认在2014年之前,删掉该行re_cell = sheet.cell(row=r, column=1)re_cell.value = "待删除"workbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")# 设置返回剩余行数函数
def remain_row():from openpyxl import load_workbookworkbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")sheet = workbook.activesheet_size = sheet.dimensions # 返回的是一个字符串如A1:G1001# 字符串切片取出行数,因为A1固定输出,所以行数为编号4以后(去掉“A1:G”即为行数)sheet_rows = sheet_size[4:]return(sheet_rows)def main():col_num = search_col("day") # 接收待遍历的列号search_col_value(col_num) # 筛选2014年之后的数据行# 调用删除数据行函数,将待删除的数据行删除delete_row()workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")sheet = workbook.active# 获取buy_mount列号buy_col_num = search_col("buy_mount")sheet_rows = int(remain_row()) + 1 # 获取剩余行数,并str转int。range左闭右开所以要+1for r in range(2,sheet_rows):cell = sheet.cell(row=r, column=buy_col_num)if cell.value == None:# 默认待删除re_cell = sheet.cell(row=r, column=1)re_cell.value = "待删除"else:if int(cell.value) < 5:# 待删除re_cell = sheet.cell(row=r, column=1)re_cell.value = "待删除"else:if int(cell.value) >= 10:pattern_fill = PatternFill(fill_type="solid", fgColor="DD001B")for need_pattern_cell in sheet[r]:need_pattern_cell.fill = pattern_fill# 字体颜色白font = Font(color="FFFFFF")for change_fontColor_cell in sheet[r]:change_fontColor_cell.font = fontworkbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")# 再调用一次删除行数据函数,buy_mount小于10的待删除数据行删除delete_row()main()
问题:delete_row时,不要放在循环中执行,因为删除了那一行,下面的行数据会向上自动填补,整张表的行标就变了,起不到删除目标行的作用。
解决方法:先将该行某一个cell的value置空,在主函数中用for循环找出空cell那一行再删掉,这种方法不涉及行号,不用担心目标行变化,为了避免某一个单元格本就是空的,可以将单元格value写如特定字符,如待删除字段
记得选中最后一行下面的那一行,清除内容,里面好像有什么东西,输出表的大小时行数比实际多一行
什么时候打开工作簿,什么时候对工作簿进行保存操作,都是需要斟酌的。写错了位置也会跑不出想要的结果
截图中单元格大小为手动调节,方便查看
python自动化办公(第9课)批量调整Excel中字体、样式相关推荐
- Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...
- python 合并word文件_python自动化办公(1)—— 批量合并word文档
上个月领导交给我一个非常紧急的任务,限我2天之内完成.其中有一项是将项目两年内的分析报告汇总到一篇报告中.这些报告分散在不同的目录下,而且数量也非常多. 我花了30分钟左右梳理了一下这些分析报告,竟然 ...
- 手把手教你python自动化办公(三)---PPT批量修改
手把手教你python自动化办公(三)---PPT批量修改 PPT批量修改 场景模拟:当公司让你制作10000个不同数据但背景相同的PPT时,你是干上三天,还是小手一挥,十秒搞定? 1.设计你想要的P ...
- python自动化办公——定制化将电子签名批量签写到PDF文件
python自动化办公--定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公--定制化将电子签名批量签写到PDF文件 1.安装依赖 2.需求分析 3.代码 1.安装依赖 首先需要下 ...
- Python 自动化办公-玩转 Word
只要是简单重复的工作,就想办法用 Python 来帮你解决吧,人生苦短,你需要 Python. Word 是办公软件中使用频率非常高的软件之一了,假如你需要调整 100 个 Word 文档的格式保持统 ...
- python自动化办公入门书籍推荐-用python进行办公自动化都需要学习什么知识呢?...
自动化办公无非是excel.ppt.word.邮件.文件处理.数据分析处理.爬虫这些.我来一一介绍如何学习,找资料! 最近做了个Python办公自动化的Live讲座,不要脸的推一波~ python基础 ...
- python自动化办公入门书籍推荐-盘点使用Python进行自动化办公所需要的知识点
知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...
- python自动化办公兼职-python自动化办公?学这些就够用了
知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手? python在自动化办公领域越来越受欢迎,批量处 ...
- python自动化办公 书籍-python自动化办公知识点整理汇总
知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...
最新文章
- ForefrontTMG关于单一的网络适配器限制
- java几个easy出错的小程序
- 不戴口罩还想出门?硬核口罩佩戴检测模型向你发出警告
- 自动增益控制AGC的simulink仿真
- python字符串,列表,字典的常用方法
- Marketing Cloud profile界面功能介绍
- MySQL这三道常见的面试题,你有被问过吗?
- 【转】 CPU、MCU、MPU、DSP的区别和介绍
- 【Processing学习】 - 公交车马路动态绘制
- oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库
- c#hello world_C#| 打印消息/文本(用于打印Hello world的程序)
- 函数定义的规范-电子书包
- LeetCode Closest Binary Search Tree Value II
- item_cat_get - 获得淘宝商品类目
- PDF转CAD工具怎么选择
- 科普一下: 关于C语言中的运算符优先级
- 路由器当做交换机使用
- 5455. 最多 K 次交换相邻数位后得到的最小整数
- 软件缺陷报告与JIRA工具使用学习笔记
- 手把手教你如何实现一个简单的数据加密算法
热门文章
- Crontab执行java/spark-shell/spark-submit 异常解决方法
- 称重传感器的工作原理与构成
- 通过kinect实现3d扫描建立打印模型(processing、skanect、ReconstructMe)
- 富士康猛招工,证明了立讯精密无法替代它
- 静态成员函数和this指针
- MySQL查询被选修的课程_sql语句查询没有被学生选修过的课程(即课程号没有在sc表中出现过)的名称....
- Oracle静态参数修改以processes为例
- python 爬网站
- Spring MCV基于注解的控制器
- AT97SC3205 安全芯片介绍