Python openpyxl:读写样式Excel一条龙,测试报表必备!
off999 2025-07-28 19:39 24 浏览 0 评论
无论你是测试工程师、数据分析师,还是想批量导出 Excel 的自动化工作者,只需一个库 openpyxl,即可高效搞定 Excel 的各种需求!
为什么选择 openpyxl?
支持 .xlsx 格式完整读写
支持 字体/颜色/边框/合并/公式/冻结窗格等格式控制
原生 Python,稳定、轻量,适合做工具类脚本
Excel 不再只是“办公软件”,它是你的自动化输出终端!
变化总是在发生
加油每一位
快速创建 Excel 文件(含样式)
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
wb = Workbook()
ws = wb.active
ws.title = "全国居民人均收入情况"
# 表头
ws.append(["指标", "2025年第一季度", "2024年第四季度", "2024年第三季度", "2024年第二季度"])
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal="center")
# 数据行
ws.append(["居民人均可支配收入累计值(元)", 12179, 41314, 30941, 20733])
ws.append(["居民人均可支配收入累计增长(%)", 5.6, 5.1, 4.9, 5.3])
wb.save("全国居民人均收入情况.xlsx")
创建完成后打开 项目预算.xlsx,你会看到带样式的 Excel 表格!
读取已有 Excel 数据
from openpyxl import load_workbook
wb = load_workbook("全国居民人均收入情况.xlsx")
ws = wb["全国居民人均收入情况"]
for row in ws.iter_rows(min_row=2, values_only=True):
print(row)
输出示例:
('居民人均可支配收入累计值(元)', 12179, 41314, 30941, 20733)
('居民人均可支配收入累计增长(%)', 5.6, 5.1, 4.9, 5.3)
可以用它来读取测试结果、日志汇总、接口返回数据。
实战技巧集锦(建议收藏)
样式设置完整示例(带边框、颜色)
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
from openpyxl.styles import Border, Side, PatternFill
wb = Workbook()
ws = wb.active
ws.title = "全国居民人均收入情况"
# 表头
ws.append(["指标", "2025年第一季度", "2024年第四季度", "2024年第三季度", "2024年第二季度"])
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal="center")
# 数据行
ws.append(["居民人均可支配收入累计值(元)", 12179, 41314, 30941, 20733])
ws.append(["居民人均可支配收入累计增长(%)", 5.6, 5.1, 4.9, 5.3])
# 设置边框
thin = Side(border_style="thin", color="000000")
border = Border(left=thin, right=thin, top=thin, bottom=thin)
# 设置背景色
fill = PatternFill(fill_type="solid", start_color="C6EFCE")
for row in ws.iter_rows(min_row=2, max_row=3, min_col=2, max_col=5):
for cell in row:
cell.border = border
cell.fill = fill
wb.save("全国居民人均收入情况.xlsx")
用于:测试报告可视化 / 表格高亮 / 自动报表生成等场景。
多 Sheet 写入示例
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "全国居民人均收入情况"
sheet1 = wb.active
sheet1.title = "居民人均可支配收入累计值(元)"
sheet2 = wb.create_sheet("居民人均可支配收入累计增长(%)")
sheet1.append(["指标", "季度"])
sheet2.append(["指标", "涨幅"])
wb.save("全国居民人均收入情况_多sheet.xlsx")
实战:测试结果汇总写入 Excel
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
data = [
["task_id", "结果", "apk", "MD5"],
["33", "合规", "西平部落", "6062ea470914341b0f05781389c02b60"],
["186", "不合规", "微达家联网", '6c195026c735b724a3cd47370f65bdf8']
]
for row in data:
ws.append(row)
wb.save("检测结果.xlsx")
可以在接口自动化、pytest hook 后自动导出。
使用场景推荐
- 接口测试结果 → 自动汇总导出为 Excel
- 每日定时跑脚本 → 输出日志、统计表
- 渠道运营数据 → 自动生成数据报表
- Excel 模板生成 → 财务预算、日报、审计记录
福利打包:实用 openpyxl 小工具
你可以封装为如下函数方便调用:
def write_excel(file, sheet, data):
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = sheet
for row in data:
ws.append(row)
wb.save(file)
使用
# 数据写入
data = [
["评估项", "结果", "数量"],
["个人信息处理原则", "不合规", 687],
["未按法律规定提供删除或更正个人信息功能或未公布投诉、举报方式等信息", "不合规", 497],
["未经用户同意收集使用个人信息", "不合规", 437],
["未公开收集使用规则", "不合规", 320],
["未明示收集使用个人信息的目的、方式和范围", "不合规", 212],
["未经同意向他人提供个人信息", "不合规", 73],
["违反必要原则,收集与其提供的服务无关的个人信息", "不合规", 62],
["个人信息处理活动中的个人权利", "不合规", 33],
]
write_excel("test.xlsx", "评估结果", data)
如果你对接下来想看:
- Word 自动生成报告(python-docx)
- 自动发送邮件 + 附件
- 自动生成测试报告
如果你觉得有用,点赞关注不迷路,后续更新更多自动化测试经验,我们一起成长!欢迎评论区留言!
相关推荐
- Linux 网络协议栈_linux网络协议栈
-
前言;更多学习资料(包含视频、技术学习路线图谱、文档等)后台私信《资料》免费领取技术点包含了C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,Z...
- 揭秘 BPF map 前生今世_bpfdm
-
1.前言众所周知,map可用于内核BPF程序和用户应用程序之间实现双向的数据交换,为BPF技术中的重要基础数据结构。在BPF程序中可以通过声明structbpf_map_def...
- 教你简单 提取fmpeg 视频,音频,字幕 方法
-
ffmpeg提取视频,音频,字幕方法(HowtoExtractVideo,Audio,SubtitlefromOriginalVideo?)1.提取视频(ExtractVi...
- Linux内核原理到代码详解《内核视频教程》
-
Linux内核原理-进程入门进程进程不仅仅是一段可执行程序的代码,通常进程还包括其他资源,比如打开的文件,挂起的信号,内核内部的数据结构,处理器状态,内存地址空间,或多个执行线程,存放全局变量的数据段...
- Linux C Socket UDP编程详解及实例分享
-
1、UDP网络编程主要流程UDP协议的程序设计框架,客户端和服务器之间的差别在于服务器必须使用bind()函数来绑定侦听的本地UDP端口,而客户端则可以不进行绑定,直接发送到服务器地址的某个端口地址。...
- libevent源码分析之bufferevent使用详解
-
libevent的bufferevent在event的基础上自己维护了一个buffer,这样的话,就不需要再自己管理一个buffer了。先看看structbufferevent这个结构体struct...
- 一次解决Linux内核内存泄漏实战全过程
-
什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费.发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示:接下来的排查思路是:1.监控系统中...
- 彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏
-
作为C/C++开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C++语言的特性引起的。C/C++语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成...
- linux网络编程常见API详解_linux网络编程视频教程
-
Linux网络编程API函数初步剖析今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。1、socket(family...
- Linux下C++访问web—使用libcurl库调用http接口发送解析json数据
-
一、背景这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。 现在的情形是远程服务端的接口参数和返回类型都是json的字符...
- 平衡感知调节:“系统如人” 视角下的架构设计与业务稳定之道
-
在今天这个到处都是数字化的时代,系统可不是一堆冷冰冰的代码。它就像一个活生生的“数字人”,没了它,业务根本转不起来。总说“技术要为业务服务”,但实际操作起来问题不少:系统怎么才能快速响应业务需求?...
- 谈谈分布式文件系统下的本地缓存_什么是分布式文件存储
-
在分布式文件系统中,为了提高系统的性能,常常会引入不同类型的缓存存储系统(算法优化所带来的的效果可能远远不如缓存带来的优化效果)。在软件中缓存存储系统一般可分为了两类:一、分布式缓存,例如:Memca...
- 进程间通信之信号量semaphore--linux内核剖析
-
什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠...
- Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门
-
一、前言在推流领域,尤其是监控行业,现在主流设备基本上都是265格式的视频流,想要在网页上直接显示监控流,之前的方案是,要么转成hls,要么魔改支持265格式的flv,要么265转成264,如果要追求...
- 30 分钟搞定 SpringBoot 视频推拉流!实战避坑指南
-
30分钟搞定SpringBoot视频推拉流!实战避坑指南在音视频开发领域,SpringBoot凭借其快速开发特性,成为很多开发者实现视频推拉流功能的首选框架。但实际开发中,从环境搭建到流处理优...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)