python之如何使用openpyxl设置单元格样式
作者:阿涛的一天
这篇文章主要介绍了python之如何使用openpyxl设置单元格样式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
引言
在pandas保存多个excel表格的时候,有时单元格中的内容很多,预览的时候不方便查看,这时候我们需要修改单元格的宽高及换行显示
下面直接来看代码
import pandas as pd import datetime df = pd.read_excel('测试.xlsx') grouped = df.groupby(['部门']) current_time = datetime.datetime.now() current_time = current_time.strftime('%m%d') print(current_time) name_list = [] for dtype,group in grouped: if "/" in dtype: dtype = dtype.replace("/","-") group.to_excel(f"./demand/{dtype}{current_time}.xlsx",index = False) name_list.append(f"./demand/{dtype}{current_time}.xlsx")
这段代码先将测试表格拆分为多个表格,并且拿到各部门的表格name。
def format_xlsx(file_path): import os from openpyxl import load_workbook from openpyxl.utils import get_column_letter from openpyxl.styles import PatternFill, Alignment, Side, Border from openpyxl.styles import Font, Color, colors, Border, Side, Alignment wb = load_workbook(file_path) # 打开工作表 ws = wb.active #设置单元格边框的线条样式 border_set = Border(left=Side(style='thin', color=colors.BLACK), # 左边框 right=Side(style='thin', color=colors.BLACK), # 右边框 top=Side(style='thin', color=colors.BLACK), # 上边框 bottom=Side(style='thin', color=colors.BLACK)) # 下边框 #设置单元格内容对齐方式 for i in ws: for j in i: # print(j,type(j)) j.alignment = Alignment(horizontal='center', vertical='center',wrapText = True) j.border = border_set #设置单元格宽高 width = 50 height = 80 # height = width * (2.2862 / 0.3612) for i in range(2, ws.max_row+1): ws.row_dimensions[i].height = height for i in range(1, ws.max_column+1): ws.column_dimensions[get_column_letter(i)].width = width wb.save(file_path)
然后定义一个format函数,来对sheet页进行格式化。
ws为worksheet,即单个sheet页,嵌套遍历时,i为列遍历的整列[“A”]、[“B”]、[“C”]…然后再行遍历,得到的就是[“A1”][“B1”][“C1”]…等所有的单元格cell。
这里设置了三个参数,水平居中”horizontal“,垂直居中”vertical”,还有一个换行显示“wrapText”。
然后是设置单元格的宽高
分别循环去获取有数据的单元格的最大长度,注意:这里的openpyxl库循环遍历时首个元素的下标为1而不是0,而行我们是从第二行开始设置的,原因是表头一般都会单独设置醒目样式以区分表体。
下面是操作截图
初始表
生成表
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。