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 osfrom openpyxl import load_workbookfrom openpyxl.utils import get_column_letterfrom openpyxl.styles import PatternFill, Alignment, Side, Borderfrom openpyxl.styles import Font, Color, colors, Border, Side, Alignmentwb = 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 = 50height = 80
#     height = width * (2.2862 / 0.3612)for i in range(2, ws.max_row+1):ws.row_dimensions[i].height = heightfor i in range(1, ws.max_column+1):ws.column_dimensions[get_column_letter(i)].width = widthwb.save(file_path)

然后定义一个format函数,来对sheet页进行格式化。ws为worksheet,即单个sheet页,嵌套遍历时,i为列遍历的整列[“A”]、[“B”]、[“C”]…然后再行遍历,得到的就是[“A1”][“B1”][“C1”]…等所有的单元格cell。
这里设置了三个参数,水平居中”horizontal“,垂直居中”vertical”,还有一个换行显示“wrapText”。

然后是设置单元格的宽高
分别循环去获取有数据的单元格的最大长度,注意:这里的openpyxl库循环遍历时首个元素的下标为1而不是0,而行我们是从第二行开始设置的,原因是表头一般都会单独设置醒目样式以区分表体。

下面是操作截图:
初始表
在这里插入图片描述

生成表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

欢迎留言、点赞加转发,哈哈


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部