当前位置:首页>python>Python语法日报 第11期|Excel自动化开篇——单元格样式与公式,别让表格丑得像个草稿

Python语法日报 第11期|Excel自动化开篇——单元格样式与公式,别让表格丑得像个草稿

  • 2026-09-16 22:20:12
Python语法日报 第11期|Excel自动化开篇——单元格样式与公式,别让表格丑得像个草稿

上期整了怎么批量读写行列,表是改完了,发给老板一看,白底黑字连个表头加粗都没有,直接被怼回来重做。今儿把样式和公式安排上,让表格看起来像正经报表,看着顺眼,咱也不用被怼。

一、先跑通基础代码

继续整上期的表(数字编程人员表.xlsx),先把库和文件准备好:

from openpyxl import load_workbookfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Sidewb = load_workbook('数字编程人员表.xlsx')ws = wb.active

styles 里这几个货:Font(字体)、PatternFill(填充色)、Alignment(对齐)、Border(边框),今天全招呼上。

二、表头加粗、变蓝、居中

表头没样式,跟正文混一块,找都找不着。给第一行(A1到C1)加点料:

header_font = Font(bold=True, color='0000FF')      # 蓝色加粗header_fill = PatternFill(start_color='DDDDDD',                           end_color='DDDDDD',                           fill_type='solid')       # 灰色底center_align = Alignment(horizontal='center', vertical='center')for cell in ws[1]:    cell.font = header_font    cell.fill = header_fill    cell.alignment = center_alignwb.save('数字编程人员表_样式.xlsx')
  • color 写十六进制不带#,'0000FF' 是纯蓝。
  • PatternFill 里 start_color 和 end_color 设成一样就是纯色填充。
  • horizontal='center' 水平居中,vertical='center' 垂直居中。

三、加边框,线别太粗

表格没边框就像没穿衣服,看着散。用 Border 统一加细黑线:

thin_border = Border(left=Side(style='thin'),                      right=Side(style='thin'),                     top=Side(style='thin'),                     bottom=Side(style='thin'))for row in ws.iter_rows():for cell in row:        cell.border = thin_borderwb.save('数字编程人员表_边框.xlsx')

Side(style='thin') 的样式还有 'medium', 'thick', 'dashed' 等,一般 thin 够用

四、给特定数据标颜色

工资低于7000的标红底,让老板一眼看到谁该加油:

red_fill = PatternFill(start_color='FF9999', end_color='FF9999', fill_type='solid')for row in range(2, ws.max_row + 1):    salary_cell = ws.cell(row, 3)if salary_cell.value and salary_cell.value < 7000:        salary_cell.fill = red_fillwb.save('数字编程人员表_标红.xlsx')

五、写入公式(比如求工资总和)

直接写 =SUM(C2:C6) 进去,Excel打开会自动算:

ws['C7'] = '=SUM(C2:C6)'# 在C7写求和公式ws['C8'] = '=AVERAGE(C2:C6)'# 平均工资wb.save('数字编程人员表_公式.xlsx')

注意:openpyxl 写入公式后,用 Python 读 cell.value 得到的是公式字符串,不是结果。要计算结果得用 data_only=True 加载已有文件。

六、调整列宽和行高(别让字挤一起)

ws.column_dimensions['A'].width = 10ws.column_dimensions['B'].width = 12ws.column_dimensions['C'].width = 8ws.row_dimensions[1].height = 25    # 表头高一点

列宽单位是字符宽度,行高单位是磅值。

七、把所有招式串成一个完整脚本

from openpyxl import load_workbookfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Sidewb = load_workbook('数字编程人员表.xlsx')ws = wb.active# 1. 表头样式header_font = Font(bold=True, color='0000FF')header_fill = PatternFill('solid', fgColor='DDDDDD')center_align = Alignment(horizontal='center')for cell in ws[1]:    cell.font = header_font    cell.fill = header_fill    cell.alignment = center_align# 2. 加边框thin = Border(left=Side(style='thin'), right=Side(style='thin'),              top=Side(style='thin'), bottom=Side(style='thin'))for row in ws.iter_rows():for cell in row:        cell.border = thin# 3. 工资低于7000标红red_fill = PatternFill('solid', fgColor='FF9999')for row in range(2, ws.max_row + 1):if ws.cell(row, 3).value and ws.cell(row, 3).value < 7000:        ws.cell(row, 3).fill = red_fill# 4. 加上公式和列宽ws['C7'] = '=SUM(C2:C6)'ws['C8'] = '=AVERAGE(C2:C6)'ws.column_dimensions['A'].width = 10ws.column_dimensions['B'].width = 12ws.column_dimensions['C'].width = 8wb.save('数字编程人员表_最终报表.xlsx')print('搞定,打开看看帅不帅')

代码运行前后对比:

八、今日核心知识点

目的
代码片段
字体加粗
Font(bold=True)
字体颜色
Font(color='FF0000')
背景填充
PatternFill('solid', fgColor='DDDDDD')
居中
Alignment(horizontal='center')
边框
Border(left=Side(style='thin'))
公式
ws['C7'] = '=SUM(C2:C6)'
列宽
ws.column_dimensions['A'].width = 15
行高
ws.row_dimensions[1].height = 25

九、下期预告

多sheet处理——一个Excel里好几个表,怎么新建、复制、汇总。还有那个烦人的合并单元格怎么拆。

觉得有用、看着顺手,记得点个赞、转一圈,收个藏,支持下继续更!

后台回复 001 ,直接拿Python全套学习资料、办公脚本、实战代码,拿走就能用。

想学习,拓展自己知识可以点进相应精选,查看代码解释和思路逻辑:

15款使用办公自动化脚本
批量调整图片尺寸及大小
PDF批量输出图片
批量提取Word文件中的图片
秒拆分几万行Excel表格数据
批量提取PDF文件中的文字
批量提取PDF文件中的图片
批量Word转PDF
批量改名几百个文件
合并PDF别再傻傻充会员了
图片转PDF还要花钱?

最新文章

随机文章