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中字体、样式相关推荐

  1. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

  2. python 合并word文件_python自动化办公(1)—— 批量合并word文档

    上个月领导交给我一个非常紧急的任务,限我2天之内完成.其中有一项是将项目两年内的分析报告汇总到一篇报告中.这些报告分散在不同的目录下,而且数量也非常多. 我花了30分钟左右梳理了一下这些分析报告,竟然 ...

  3. 手把手教你python自动化办公(三)---PPT批量修改

    手把手教你python自动化办公(三)---PPT批量修改 PPT批量修改 场景模拟:当公司让你制作10000个不同数据但背景相同的PPT时,你是干上三天,还是小手一挥,十秒搞定? 1.设计你想要的P ...

  4. python自动化办公——定制化将电子签名批量签写到PDF文件

    python自动化办公--定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公--定制化将电子签名批量签写到PDF文件 1.安装依赖 2.需求分析 3.代码 1.安装依赖 首先需要下 ...

  5. Python 自动化办公-玩转 Word

    只要是简单重复的工作,就想办法用 Python 来帮你解决吧,人生苦短,你需要 Python. Word 是办公软件中使用频率非常高的软件之一了,假如你需要调整 100 个 Word 文档的格式保持统 ...

  6. python自动化办公入门书籍推荐-用python进行办公自动化都需要学习什么知识呢?...

    自动化办公无非是excel.ppt.word.邮件.文件处理.数据分析处理.爬虫这些.我来一一介绍如何学习,找资料! 最近做了个Python办公自动化的Live讲座,不要脸的推一波~ python基础 ...

  7. python自动化办公入门书籍推荐-盘点使用Python进行自动化办公所需要的知识点

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...

  8. python自动化办公兼职-python自动化办公?学这些就够用了

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手? python在自动化办公领域越来越受欢迎,批量处 ...

  9. python自动化办公 书籍-python自动化办公知识点整理汇总

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...

最新文章

  1. ForefrontTMG关于单一的网络适配器限制
  2. java几个easy出错的小程序
  3. 不戴口罩还想出门?硬核口罩佩戴检测模型向你发出警告
  4. 自动增益控制AGC的simulink仿真
  5. python字符串,列表,字典的常用方法
  6. Marketing Cloud profile界面功能介绍
  7. MySQL这三道常见的面试题,你有被问过吗?
  8. 【转】 CPU、MCU、MPU、DSP的区别和介绍
  9. 【Processing学习】 - 公交车马路动态绘制
  10. oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库
  11. c#hello world_C#| 打印消息/文本(用于打印Hello world的程序)
  12. 函数定义的规范-电子书包
  13. LeetCode Closest Binary Search Tree Value II
  14. item_cat_get - 获得淘宝商品类目
  15. PDF转CAD工具怎么选择
  16. 科普一下: 关于C语言中的运算符优先级
  17. 路由器当做交换机使用
  18. 5455. 最多 K 次交换相邻数位后得到的最小整数
  19. 软件缺陷报告与JIRA工具使用学习笔记
  20. 手把手教你如何实现一个简单的数据加密算法

热门文章

  1. Crontab执行java/spark-shell/spark-submit 异常解决方法
  2. 称重传感器的工作原理与构成
  3. 通过kinect实现3d扫描建立打印模型(processing、skanect、ReconstructMe)
  4. 富士康猛招工,证明了立讯精密无法替代它
  5. 静态成员函数和this指针
  6. MySQL查询被选修的课程_sql语句查询没有被学生选修过的课程(即课程号没有在sc表中出现过)的名称....
  7. Oracle静态参数修改以processes为例
  8. python 爬网站
  9. Spring MCV基于注解的控制器
  10. AT97SC3205 安全芯片介绍