Python pandas openpyxl excel合并单元格,设置边框,背景色
Python pandas openpyxl excel合并单元格,设置边框,背景色
- 1. 效果图
- 2. 源码
- 参考
1. 效果图
pandas设置单元格背景色,字体颜色,边框
openpyxl合并单元格,设置丰富的字体
2. 源码
# excel数字与列名互转
import osimport numpy as np
import openpyxl
import pandas as pd
from openpyxl.styles import Side, Border, Font# 列名转数字
def column_to_num(s: str) -> int:assert (isinstance(s, str))for i in s:if not 64 < ord(i) < 91:raise ValueError('Excel Column ValueError')return sum([(ord(n) - 64) * 26 ** i for i, n in enumerate(list(s)[::-1])])# 数字转列名
def num_to_column(n: int) -> str:assert (isinstance(n, int) and n > 0)num = [chr(i) for i in range(65, 91)]ret = []while n > 0:n, m = divmod(n - 1, len(num))ret.append(num[m])return ''.join(ret[::-1])def read_and_merge(file=None):np.random.seed(24)print([x[0] for x in np.random.randn(10, 1).tolist()])data = {'name': ['Lucy'] * 10,'title': ['美丽的花朵'] * 6 + ['面向未来'] * 4,'爱好': ['篮球', '足球', '羽毛球', '乒乓球', '网球', '游泳', '瑜伽', '阅读', '骑行', '爬山'],'Date': pd.to_datetime(['2017-05-31 20:53:00', '2017-05-11 20:53:00', '2017-05-08 20:53:00','2017-06-06 20:53:00', '2017-06-06 20:53:00'] * 2),'A': np.linspace(1, 10, 10).tolist(),'B': [x[0] for x in np.random.randn(10, 1).tolist()],'C': [x[0] for x in np.random.randn(10, 1).tolist()],'D': [x[0] for x in np.random.randn(10, 1).tolist()],'E': [x[0] for x in np.random.randn(10, 1).tolist()],'F': [x[0] for x in np.random.randn(10, 1).tolist()],'G': [x[0] for x in np.random.randn(10, 1).tolist()],'H': [x[0] for x in np.random.randn(10, 1).tolist()]}df_b = pd.DataFrame(data)print(df_b)# 定义一个函数来设置样式,将文本居中对齐和上下居中对齐def set_cell_style(value):style = 'text-align: center; vertical-align: middle; border: solid 1px black; 'return styledef set_cell_color(val):if val < 4:color = 'green'elif val < 8:color = 'yellow'else:color = 'red'return 'background-color: %s' % colordef color_negative_red(val):"""Takes a scalar and returns a string withthe css property `'color: red'` for negativestrings, black otherwise."""# print('---val:', val)# color_list = []# for val in vals:# color = 'color: %s' % ('red' if val < 0 else 'black')# color_list.append(color)# return color_listreturn 'color: %s' % ('red' if val < 0 else 'black')# 使用Styler对象来应用样式,同时设置文本的居中对齐和上下居中对齐df_c = df_b.style.map(lambda x: set_cell_style(x)).map(lambda x: set_cell_color(x), subset=['A']).map(lambda x: color_negative_red(x), subset=pd.IndexSlice[[1, 3, 5, 7, 9], ['B', 'C', 'D', 'G']])# 保存到新文件df_c.to_excel('temp.xlsx', index=False, engine='openpyxl')# 合并单元格wb = openpyxl.load_workbook('temp.xlsx')ws = wb.active# 第一列连续相同值的合并单元格# 获取第一列数据type_list = []i = 2while True:r = ws.cell(i, 1).valueif r:type_list.append(r)else:breaki += 1# 判断合并单元格的始末位置s = 0e = 0flag = type_list[0]for i in range(len(type_list)):if type_list[i] != flag:flag = type_list[i]e = i - 1if e >= s:ws.merge_cells("A" + str(s + 2) + ":A" + str(e + 2))s = e + 1if i == len(type_list) - 1:e = iws.merge_cells("A" + str(s + 2) + ":A" + str(e + 2))### 合并列num_rows = ws.max_rowcombine_columns = {('F', 'G')}for i in range(num_rows):for columns in combine_columns:start, end = columnsws.merge_cells(start + str(i + 1) + ":" + end + str(i + 1))# 定义不同列的字体配置font_columns = [(['A', 'B', 'C'], Font(name='Times New Roman', size=9, bold=True)),(['D', 'E'], Font(name='Times New Roman', size=12)),(['F', 'G'], Font(name='宋体', size=12)),]# 设置列的字体样式for labels, font in font_columns:for label in labels:for cell in ws[label]:cell.font = font# XX结尾的数据改成红色if cell.value and str(cell.value).endswith("XX"):cell.value = cell.value[:-2]cell.font = Font(name='Times New Roman', size=12, bold=True, color="FF0000", )# 创建一个边框样式border_style = Border(left=Side(border_style='thin', color='000000'),right=Side(border_style='thin', color='000000'),top=Side(border_style='thin', color='000000'),bottom=Side(border_style='thin', color='000000'))# 遍历工作表中的所有单元格并应用边框样式for row in ws.iter_rows():for cell in row:cell.border = border_stylewb.save('output_excel_file.xlsx')try:os.remove('temp.xlsx')except FileNotFoundError:passexcept Exception as e:passreturn 'output_excel_file.xlsx'if __name__ == '__main__':for i in range(1, 100):column_name = num_to_column(i)print(i, column_name, column_to_num(column_name))read_and_merge()
参考
- https://blog.csdn.net/boysoft2002/article/details/119794260
- https://blog.csdn.net/flysnownet/article/details/134049045
- https://blog.csdn.net/shenqigongshi/article/details/131438042
- https://blog.csdn.net/shenghaomail/article/details/125754836
- https://blog.csdn.net/Xw_Classmate/article/details/109006600
相关文章:

Python pandas openpyxl excel合并单元格,设置边框,背景色
Python pandas openpyxl excel合并单元格,设置边框,背景色 1. 效果图2. 源码参考 1. 效果图 pandas设置单元格背景色,字体颜色,边框 openpyxl合并单元格,设置丰富的字体 2. 源码 # excel数字与列名互转 import o…...

【vue3|第7期】 toRefs 与 toRef 的深入剖析
日期:2024年6月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方ÿ…...
git代码冲突处理软件P4Merge
文章目录 1. 下载安装2. 配置脚本参考链接 1. 下载安装 下载地址:https://www.perforce.com/downloads/helix-visual-client-p4v 下载教程:http://blog.csdn.net/wirelessqa/article/details/9035215 这里下载之前需要注册。 2. 配置脚本 编写一个全局…...
Unity物体材质属性Offset动态偏移
Unity物体材质属性Offset动态偏移 MeshRenderer mr;float offset;public float scrollSpeed 0.5F;private void Start(){mr GetComponent<MeshRenderer>();}void Update(){offset -Time.time * scrollSpeed;mr.material.mainTextureOffset new Vector2(0, -offset);}…...

【数据结构】筛选法建堆
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…...

DevExpress Installed
一、What’s Installed 统一安装程序将DevExpress控件和库注册到Visual Studio中,并安装DevExpress实用工具、演示应用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜单 Demo Applications 演示应用程序 Launch the Demo…...
解决QT QMessageBox 弹出需点击两次才能关闭问题
放个链接不迷路:添加链接描述...
Milvus--向量数据库
Milvus 是一个开源的向量数据库,专为高维向量数据的存储、查询和检索而设计。它支持多种类型的向量数据,如浮点数向量、整数向量等,并且提供了强大的向量相似度计算功能。Milvus采用分布式架构,可以轻松地扩展到大规模数据集&…...

php质量工具系列之PHPCPD
PHPCPD 用于检测重复代码,直观的说就是复制粘贴再稍微改改 该工具作者已经 停止维护 安装 composer global require --dev sebastian/phpcpd执行 phpcpd --log-pmd phpcpd_result.xml ./app参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中 ./app 是phpcpd扫…...

Android14 WMS-窗口绘制之relayoutWindow流程(二)-Server端
本文接着如下文章往下讲 Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端-CSDN博客 然后就到了Server端WMS的核心实现方法relayoutWindow里 WindowManagerService.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/android/server…...
安全测试 之 安全漏洞:SQL注入
1. 背景 持续学习安全测试ing,安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品是否符合安全需求定义和产品质量标准的过程。也就是说安全测试是建立在功能测试的基础上进行的测试。 2. SQL…...
CUDA和驱动版本之间的对应关系
这个之前总结过,可是不太好找,专门写一篇博客再总结一下: 1. CUDA 12.5 Release Notes — Release Notes 12.5 documentation 相信很多朋友有一样的需求。...
MDK(μVsion3)问题总结及解决方法
问题 1:MDK 工具的 CARM 编译器? 我原来对 CARM 编译器比较熟悉,想用 CARM 编译器编译工程,但是却弹出一个不能执 行“cc”的错误,到 KEIL 网站查下才知道原因:由于 CARM 编译器是比较老的编译器࿰…...

手眼标定学习笔记
目录 标定代码: 手眼标定原理学习 什么是手眼标定 手眼标定的目的 eye in hand eye to hand AXXB问题的求解 标定代码: GitHub - pumpkin-ws/HandEyeCalib 推荐博文: https://zhuanlan.zhihu.com/p/486592374 手眼标定原理学习 参…...

Dell戴尔XPS 16 9640 Intel酷睿Ultra9处理器笔记本电脑原装出厂Windows11系统包,恢复原厂开箱状态oem预装系统
下载链接:https://pan.baidu.com/s/1j_sc8FW5x-ZreNrqvRhjmg?pwd5gk6 提取码:5gk6 戴尔原装系统自带网卡、显卡、声卡、蓝牙等所有硬件驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell、迈克菲等预装软…...

【第8章】SpringBoot实战篇之文章分类(上)
文章目录 前言一、后端代码1. CategoryController2. service3. CategoryMapper4. Category 二、测试1. 失败(校验)2.正常 总结 前言 从这开始进入文章相关的接口开发,本章主要介绍定义文章分类接口和新增文章分类 建表语句和测试用例,在SpringBoot专栏首…...
【QT】Qt Plugin开发
目录 插件是什么QT插件是什么 为什么要有插件开发插件开发优势插件和动态库区别 Qt PluginQT插件类型QT插件开发流程QT插件应用QT插件JSON文件 参考文章 插件是什么 插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。…...
快速了解GPU分布通信技术:PCIe、NVLink与NVSwitch
在现代高性能计算和深度学习领域,GPU的强大计算能力使其成为不可或缺的工具。然而,随着模型复杂度的增加,单个GPU已经无法满足需求,需要多个GPU甚至多台服务器协同工作。这就要求高效的GPU互联通信技术,以确保数据传输…...

Python对获取数据的举例说明
当使用Python来获取数据时,有许多不同的方法和库可以根据你的需求来选择。以下是一些常见的示例,说明如何使用Python来从各种来源获取数据。 1. 从网站或API获取JSON数据 你可以使用requests库从网站或API获取JSON格式的数据。例如,从某个API…...

JVMの垃圾回收
在上一篇中,介绍了JVM组件中的运行时数据区域,这一篇主要介绍垃圾回收器 JVM架构图: 1、垃圾回收概述 在第一篇中介绍JVM特点时,有提到过内存管理,即Java语言相对于C,C进行的优化,可以在适当的…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...