上期整了怎么批量读写行列,表是改完了,发给老板一看,白底黑字连个表头加粗都没有,直接被怼回来重做。今儿把样式和公式安排上,让表格看起来像正经报表,看着顺眼,咱也不用被怼。
继续整上期的表(数字编程人员表.xlsx),先把库和文件准备好:
from openpyxl import load_workbookfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Sidewb = load_workbook('数字编程人员表.xlsx')ws = wb.activestyles 里这几个货: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里好几个表,怎么新建、复制、汇总。还有那个烦人的合并单元格怎么拆。
觉得有用、看着顺手,记得点个赞、转一圈,收个藏,支持下继续更!
想学习,拓展自己知识可以点进相应精选,查看代码解释和思路逻辑: