news 2026/6/10 0:27:41

python用openpyxl操作excel-单元格样式操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python用openpyxl操作excel-单元格样式操作

python用openpyxl操作excel的单元格样式操作

import logging import com.pro001.log.pro_log_config as pro_log_config from openpyxl import Workbook, load_workbook from openpyxl.styles import Font, Alignment, Side, PatternFill, Border import os import datetime import random import pandas as pd def create_sn2(prefix, output_len=4): '''生成含有前缀带日期和尾长度格式的序列号, 格式:prefix_YYYYMMDD_HHMMSS_0{output_len}d''' if output_len < 1: output_len = 1 if not prefix: prefix = '' sn = 0 while True: sn += 1 if len(str(sn)) > output_len: sn = 0 dt = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') tmp = f'{prefix}{dt}' tmp = tmp + '{:0{}}'.format(sn, output_len) yield tmp def create_sn(prefix, output_len=4): '''生成含有前缀并至少带指定长度格式的序列号, 格式:prefix_d0{output_len}1''' if output_len < 1: output_len = 1 sn = 0 while True: sn += 1 if len(str(sn)) > output_len: # 当大于指定位数时直接加上位数 yield f'{prefix}' + str(sn) else: yield f'{prefix}' + '{:0{}}'.format(sn, output_len) def sheet_cell_style_operate(base_file_path): """ 工作表单元格样式操作 """ if not base_file_path: os.path.makedirs(base_file_path) logger.error(f'已创建文件路径:{base_file_path}') try: # 创建 Workbook 对象并指定第一个sheet为活动sheet wb = Workbook() ws = wb.worksheets[0] wb.active = ws sh_name = create_sn3('',4) # 指定sheet名称 ws.title = next(sh_name) # 创建表头样式 header_style_font = Font(name='Arial', size=10, bold=True, color='060606') body_style_font = Font(name='Arial', size=9, bold=False, color='006600') cell_alignment = Alignment(horizontal='center', vertical='center') # 添加列名,即表头 header_list = ['报案号','姓名', '年龄', '邮箱','报案时间', '受理时间','受理状态','受理人','是否结案','结案时间'] # 序号从1开始,枚举 header_list列表,建立表头 for i, header in enumerate(header_list, start=1): ws.cell(row=1, column=i, value=header) # 获取表头的各个单元格对象 head_cell = ws[1] # 设置表头样式 for head_cell in head_cell: head_cell.font = header_style_font head_cell.alignment = cell_alignment # 设置表头的行高 ws.row_dimensions[1].height = 18 # 动态设置各列的宽度 max_cell_num = ws.max_column for i in range(1, max_cell_num+1): # 动态获取每列的坐标字母 col_letter = ws.cell(row=1, column=i).column_letter # 根据列的字母坐标设定每列的宽度 ws.column_dimensions[col_letter].width = 16 # 添加表体数据 claim_no = create_sn2('CN', 5) claim_status = ['未受理','已受理'] case_status = ['理赔中', '已结案','已撤案'] '''['报案号','姓名','年龄','邮箱','报案时间','受理时间','受理状态','受理人','是否结案','结案时间']''' for i in range(1, 31): new_max_num = ws.max_row + 1 ws.cell(row=new_max_num, column=1, value=next(claim_no)) ws.cell(row=new_max_num, column=2, value=f'姓名{random.randint(10, 200)}') ws.cell(row=new_max_num, column=3, value=random.randint(18, 100)) ws.cell(row=new_max_num, column=4, value=f'email{random.randint(100, 300)}@xxx.com') dt = datetime.datetime.now() dt = dt - datetime.timedelta(days=random.randint(3, 180)) dt_str = dt.strftime('%Y-%m-%d %H:%M:%S') ws.cell(row=new_max_num, column=5, value=f'{dt_str}') dt = dt + datetime.timedelta(days=random.randint(2, 7)) dt_str = dt.strftime('%Y-%m-%d %H:%M:%S') ws.cell(row=new_max_num, column=6, value=f'{dt_str}') ws.cell(row=new_max_num, column=7, value=f'{random.sample(claim_status, 1)[0]}') ws.cell(row=new_max_num, column=8, value=f'受理人{random.randint(10, 40)}') ws.cell(row=new_max_num, column=9, value=f'{random.sample(case_status, 1)[0]}') dt = dt + datetime.timedelta(days=random.randint(7, 30)) dt_str = dt.strftime('%Y-%m-%d %H:%M:%S') ws.cell(row=new_max_num, column=10, value=f'{dt_str}') # 遍历表体(表头除外)所有单元格并应用样式 max_cell_num = ws.max_column max_row_num = ws.max_row next5 = 1 next5_row_fill = PatternFill(start_color='09E1F2', end_color='09E1F2', fill_type='solid') calim_done_fill = PatternFill(start_color='278b06', end_color='278b06', fill_type='solid') calim_done_font = Font(name='Arial', size=8, bold=True, color='faea37') calim_ing_fill = PatternFill(start_color='FDE9D9', end_color='FDE9D9', fill_type='solid') calim_ing_side = Side(border_style='medium', color='e46c0a') # 定义颜色边框 claim_ing_border = Border(top=calim_ing_side, right=calim_ing_side, bottom=calim_ing_side, left=calim_ing_side) blue_side = Side(border_style='medium', color='e46c0a') # 定义蓝色边框 top_border = Border(top=blue_side) for row in ws.iter_rows(min_row=2, max_row=max_row_num, min_col=1, max_col=max_cell_num): next5 = next5 + 1 if next5 % 5 == 0: ws.row_dimensions[next5].height = 18 for cell in row: cell.alignment = cell_alignment # 每隔5行设置单元格样式浅蓝色上边框深蓝色 if next5 % 5 == 0: cell.fill = next5_row_fill cell.border = top_border val = cell.value # 特定单元格应用不一样的样式 if val == '未受理': cell.fill = calim_ing_fill cell.border = claim_ing_border if val == '已结案': cell.font = calim_done_font cell.fill = calim_done_fill else: cell.font = body_style_font # 保存wb对象 suffix = '.xlsx' file_path_name = '' if not base_file_path.lower().endswith(suffix): file_path_name = 'ELX' + datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + suffix file_path_name = os.path.join(base_file_path, file_path_name) else: file_path_name = base_file_path logger.info(f'参加文件:{file_path_name}') wb.save(file_path_name) except Exception as e: logger.error(f'文件{base_file_path}操作失败,info:\n{e}') return None def main(): """主函数""" sheet_cell_style_operate(r'F:\appData') if __name__ == '__main__': print('-' * 60) main()

运行后效果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:52:42

小红书内容运营工具怎么选?专业视角拆解优质工具核心标准

在小红书成为品牌 “种草主阵地” 的当下&#xff0c;内容运营的效率与质量直接决定品牌曝光与转化效果。但多数品牌面临 “优质内容产出慢、关键词适配差、数据优化无依据” 等痛点&#xff0c;单纯依赖人工运营已难以应对平台高频更新与用户精细化需求。而一款好用的小红书内…

作者头像 李华
网站建设 2026/6/10 9:42:59

Cesium快速入门到精通系列教程二十二:Cesium1.95中设置颜色的方式

一、基础颜色定义方式Cesium 中最核心的颜色类是 Cesium.Color&#xff0c;所有可视化元素&#xff08;模型、几何体、材质、标签等&#xff09;的颜色最终都依赖此类定义&#xff0c;主要有以下初始化方式&#xff1a;1. 预定义纯色&#xff08;直接调用内置常量&#xff09;C…

作者头像 李华
网站建设 2026/6/10 15:33:35

C++学习之旅【实战全面解析C++类和对象】

&#x1f525;承渊政道&#xff1a;个人主页 ❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法初阶》《C初阶知识内容》 ✨逆境不吐心中苦,顺境不忘来时路! &#x1f3ac; 博主简介: 引言:前篇文章,小编已经将我所学的C类和对象的相关知识介绍完了,俗话说的好,温故知新,…

作者头像 李华
网站建设 2026/6/9 21:29:57

如何一键生成文件二维码?文件二维码在线制作指南

日常工作和生活中&#xff0c;我们常常需要分享各类文件 —— 合同文档、课件资料、设计素材等&#xff0c;传统的文件传输方式要么受大小限制&#xff0c;要么操作繁琐。其实&#xff0c;给文件生成二维码&#xff0c;扫码即可直接下载或查看&#xff0c;无需复杂步骤&#xf…

作者头像 李华
网站建设 2026/6/10 13:33:01

软件工程正是为了应对“软件危机”而诞生的学科,其核心目标是通过系统化

软件工程正是为了应对“软件危机”而诞生的学科&#xff0c;其核心目标是通过系统化、规范化和可量化的方法来提高软件开发的效率与质量。面对第三代计算机硬件快速发展所带来的软件需求激增&#xff0c;传统的手工作坊式开发方式已无法满足复杂系统的构建需求&#xff0c;从而…

作者头像 李华
网站建设 2026/6/10 12:07:45

21、Ubuntu 软件安装、卸载与系统维护全攻略

Ubuntu 软件安装、卸载与系统维护全攻略 在 Ubuntu 系统中,软件的安装与卸载以及系统的维护和安全保障是日常使用中非常重要的环节。下面将详细介绍多种软件管理方式以及系统维护的相关内容。 1. Synaptic 软件包管理器 Synaptic 除了有用于显示类别和安装状态的“Sections…

作者头像 李华