当前位置: 首页 > news >正文

使用openpyxl轻松操控Excel文件

目录

  • 1. `openpyxl` 简介
  • 2. 安装与快速入门
    • 2.1 安装 `openpyxl`
    • 2.2 快速创建一个 Excel 文件
    • 2.3 读取 Excel 文件
  • 3. `openpyxl` 的核心概念
    • 3.1 工作簿(Workbook)
    • 3.2 工作表(Worksheet)
    • 3.3 单元格(Cell)
    • 3.4 行与列
    • 3.5 范围(Range)
    • 3.6 公式与函数
    • 3.7 样式与格式
  • 4. Excel 文件的读取与写入
    • 4.1 读取 Excel 文件
    • 4.2 写入 Excel 文件
    • 4.3 实践:批量修改单元格
  • 5. 高级功能详解
    • 5.1 操作公式
    • 5.2 添加图表
    • 5.3 插入图片
    • 5.4 数据验证
    • 5.5 条件格式
  • 6. 样式与格式设置
    • 6.1 字体样式
    • 6.2 单元格填充
    • 6.3 边框设置
    • 6.4 对齐方式
    • 6.5 数字格式
    • 6.6 合并与拆分单元格
    • 6.7 实践:制作格式化报表

1. openpyxl 简介

Python 的 openpyxl 库是处理 Excel 文件的强大工具。在数据分析、自动化办公和报告生成等领域,经常需要对 Excel 文件进行读取、修改和创建操作。openpyxl 提供了全面的功能,允许开发者以编程方式操纵 Excel 文件,从而提高工作效率并减少手动操作的错误。

具体来讲,openpyxl 是一个用于读取和写入 Microsoft Excel 2010 xlsx/xlsm/xltx/xltm 文件的开源库。与其他处理 Excel 文件的库相比,openpyxl 专注于对现代 Excel 格式(即基于 XML 的 .xlsx 文件)的支持。

主要特点包括:

  • 读取和写入 Excel 文件:支持对单元格、行、列、工作表和工作簿的操作。
  • 格式化:可以修改单元格的字体、颜色、边框和对齐方式等格式属性。
  • 图表和图片:支持在工作表中插入图表和图片,增强数据的可视化。
  • 公式:能够读取和设置单元格中的公式,支持计算公式结果。

2. 安装与快速入门

2.1 安装 openpyxl

在开始使用 openpyxl 之前,需要先进行安装。可以通过 pip 进行安装:

pip install openpyxl

确保您的 Python 版本在 3.6 及以上,因为较早的版本可能不支持部分功能。

2.2 快速创建一个 Excel 文件

以下是一个使用 openpyxl 创建简单 Excel 文件的示例:

import openpyxl
from openpyxl import Workbook# 创建一个新的工作簿
wb = Workbook()# 激活默认的工作表
ws = wb.active# 在单元格中写入数据
ws['A1'] = 'Hello'
ws['B1'] = 'World!'# 保存工作簿
wb.save('hello_world.xlsx')

运行上述代码后,将在当前目录下生成一个名为 hello_world.xlsx 的 Excel 文件,内容如下:

AB
HelloWorld!

2.3 读取 Excel 文件

openpyxl 还可以读取已有的 Excel 文件。下面是读取刚才创建的文件并打印单元格内容的示例:

import openpyxl# 加载已有的工作簿
wb = openpyxl.load_workbook('hello_world.xlsx')# 选择活动的工作表
ws = wb.active# 读取并打印单元格内容
print(ws['A1'].value)  # 输出: Hello
print(ws['B1'].value)  # 输出: World!

通过以上简单的示例,我们已经了解了如何使用 openpyxl 创建和读取 Excel 文件。在接下来的章节中,我们将详细介绍 openpyxl 的核心概念和高级功能。

3. openpyxl 的核心概念

在使用 openpyxl 操作 Excel 文件时,需要理解一些核心概念,这将有助于我们更有效地利用该库。

3.1 工作簿(Workbook)

工作簿是 Excel 文件的顶层容器,包含了所有的工作表、全局设置和属性。

  • 创建工作簿wb = Workbook()
  • 加载工作簿wb = load_workbook(filename)

3.2 工作表(Worksheet)

工作簿包含一个或多个工作表,每个工作表都是一个二维的单元格网格。

  • 激活工作表ws = wb.active
  • 创建新工作表ws = wb.create_sheet(title='SheetName')
  • 访问特定工作表ws = wb['SheetName']

3.3 单元格(Cell)

单元格是工作表中的基本元素,包含数据、样式和其他属性。

  • 访问单元格cell = ws['A1']cell = ws.cell(row=1, column=1)
  • 设置单元格值ws['A1'] = 'Data'
  • 获取单元格值value = ws['A1'].value

3.4 行与列

可以通过行和列来批量操作单元格。

  • 迭代行for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
  • 迭代列for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):

3.5 范围(Range)

范围是指一组连续的单元格,可以对其进行批量操作。

  • 访问范围cell_range = ws['A1:C3']

3.6 公式与函数

可以在单元格中使用公式,openpyxl 支持 Excel 的大部分公式。

  • 设置公式ws['A2'] = '=SUM(A1:A10)'
  • 读取公式结果:需要在 Excel 中打开文件,或使用 data_only 参数加载工作簿。
wb = load_workbook('formula.xlsx', data_only=True)

3.7 样式与格式

openpyxl 提供了丰富的样式和格式选项,可以设置字体、颜色、对齐方式等。

设置字体

from openpyxl.styles import Font
ws['A1'].font = Font(name='Calibri', size=14, bold=True)

设置填充颜色

from openpyxl.styles import PatternFill
ws['A1'].fill = PatternFill(fill_type='solid', start_color='FF0000')

4. Excel 文件的读取与写入

在数据处理过程中,读取和写入 Excel 文件是最常见的操作。openpyxl 提供了简单直观的方法来完成这些任务。

4.1 读取 Excel 文件

加载工作簿

使用 load_workbook 函数加载已有的 Excel 文件:

from openpyxl import load_workbookwb = load_workbook('data.xlsx')

选择工作表

可以通过多种方式选择工作表:

使用工作表名称:

ws = wb['Sheet1']

使用 active 属性:

ws = wb.active

读取单元格数据

读取单元格的值:

value = ws['A1'].value

或者使用行列索引:

value = ws.cell(row=1, column=1).value

遍历数据

遍历所有行和列:

for row in ws.iter_rows(values_only=True):print(row)

4.2 写入 Excel 文件

写入单元格

在特定单元格中写入数据:

ws['A1'] = 'New Data'

或者使用行列索引:

ws.cell(row=1, column=1, value='New Data')

插入行和列

插入一行:

ws.insert_rows(idx=2)

插入一列:

ws.insert_cols(idx=3)

删除行和列

删除一行:

ws.delete_rows(idx=2)

删除一列:

ws.delete_cols(idx=3)

保存工作簿

完成所有修改后,保存工作簿:

wb.save('modified_data.xlsx')

4.3 实践:批量修改单元格

假设我们有一个成绩表,需要将所有学生的成绩提高 5 分。

from openpyxl import load_workbookwb = load_workbook('scores.xlsx')
ws = wb.active# 假设成绩在 B 列,从第 2 行开始
for row in ws.iter_rows(min_row=2, min_col=2, max_col=2):for cell in row:if isinstance(cell.value, (int, float)):cell.value += 5wb.save('updated_scores.xlsx')

通过以上操作,我们成功地批量修改了 Excel 文件中的数据。

5. 高级功能详解

openpyxl 不仅可以进行基本的读取和写入操作,还提供了许多高级功能,例如图表、图片和数据验证等。

5.1 操作公式

可以在单元格中写入公式:

ws['A10'] = '=SUM(A1:A9)'

openpyxl 不会自动计算公式结果,但可以通过设置 data_only=True 来读取公式计算后的值:

wb = load_workbook('formula.xlsx', data_only=True)
ws = wb.active
print(ws['A10'].value)

5.2 添加图表

以创建柱状图为例:

from openpyxl.chart import BarChart, Referencechart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_row=10)
chart.add_data(data, titles_from_data=True)
ws.add_chart(chart, 'E5')

可以设置图表的标题、轴标签等属性:

chart.title = "Sales Chart"
chart.x_axis.title = "Month"
chart.y_axis.title = "Sales"

5.3 插入图片

from openpyxl.drawing.image import Imageimg = Image('logo.png')

添加图片到工作表:

ws.add_image(img, 'A1')

5.4 数据验证

可以添加数据验证来限制单元格的输入内容。

创建数据验证对象

from openpyxl.worksheet.datavalidation import DataValidationdv = DataValidation(type="whole", operator="between", formula1=1, formula2=100)

添加数据验证到工作表

dv.add('A1:A10')
ws.add_data_validation(dv)

5.5 条件格式

根据单元格的值,动态地改变单元格的格式。

创建条件格式规则

from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFillred_fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')ws.conditional_formatting.add('A1:A10', CellIsRule(operator='greaterThan', formula=['80'], fill=red_fill))

通过以上高级功能的介绍,可以看出 openpyxl 在处理 Excel 文件时具有非常强大的能力,足以满足大多数复杂的需求。

6. 样式与格式设置

为了使 Excel 文件更加美观和专业,openpyxl 提供了丰富的样式和格式设置选项。

6.1 字体样式

设置字体

from openpyxl.styles import Fontbold_font = Font(bold=True)
italic_font = Font(italic=True)ws['A1'].font = bold_font
ws['A2'].font = italic_font

设置字体颜色和大小

from openpyxl.styles import Font, colorsfont_style = Font(color=colors.RED, size=14, name='Arial')
ws['A1'].font = font_style

6.2 单元格填充

设置背景颜色

from openpyxl.styles import PatternFillfill = PatternFill(fill_type='solid', start_color='FFFF00', end_color='FFFF00')
ws['A1'].fill = fill

6.3 边框设置

添加边框

from openpyxl.styles import Border, Sidethin_border = Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))ws['A1'].border = thin_border

6.4 对齐方式

设置对齐方式

from openpyxl.styles import Alignmentalignment = Alignment(horizontal='center', vertical='center')
ws['A1'].alignment = alignment

6.5 数字格式

设置数字格式

ws['A1'].number_format = '0.00'  # 保留两位小数

6.6 合并与拆分单元格

合并单元格

ws.merge_cells('A1:C1')

拆分单元格

ws.unmerge_cells('A1:C1')

6.7 实践:制作格式化报表

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Sidewb = Workbook()
ws = wb.active# 写入表头
headers = ['姓名', '数学', '英语', '总分']
ws.append(headers)# 添加数据
data = [['张三', 85, 92],['李四', 78, 88],['王五', 90, 95]
]for row in data:total = row[1] + row[2]row.append(total)ws.append(row)# 设置表头样式
for cell in ws[1]:cell.font = Font(bold=True)cell.alignment = Alignment(horizontal='center')cell.border = Border(bottom=Side(style='thin'))# 设置列宽
ws.column_dimensions['A'].width = 15
for col in ['B', 'C', 'D']:ws.column_dimensions[col].width = 10# 保存工作簿
wb.save('report.xlsx')

通过以上代码,我们生成了一个格式化的成绩报表,包含表头加粗、单元格对齐、边框和列宽设置。

相关文章:

使用openpyxl轻松操控Excel文件

目录 1. openpyxl 简介2. 安装与快速入门2.1 安装 openpyxl2.2 快速创建一个 Excel 文件2.3 读取 Excel 文件 3. openpyxl 的核心概念3.1 工作簿(Workbook)3.2 工作表(Worksheet)3.3 单元格(Cell)3.4 行与列…...

指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名

常见场景 用户有大量图片/PDF文件,期望能按照图片/PDF中的某些文字对图片/PDF文件重命名。期望工具可以批量处理、离线识别(保证数据安全性)。手工操作麻烦。具体场景:用户有工程现场照片,订单,简历等PDF或…...

Web3中的跨链技术:实现无缝连接的挑战

Web3的到来为互联网带来了去中心化的愿景,而跨链技术则是实现这一愿景的关键。跨链技术旨在解决不同区块链之间的互操作性问题,使得用户和应用能够在多个区块链网络之间无缝地传输数据和价值。尽管这一技术具有广阔的前景,但在实现过程中仍面…...

词袋(Bag of Words, BoW)

词袋(Bag of Words, BoW)模型详解 词袋(BoW)是一种用于文本处理的特征提取方法,常用于自然语言处理(NLP)任务中。在BoW模型中,文本被表示为一个词的无序集合,而忽略了词…...

HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA

检查xml文件的包名有无错误检查html文件的url有无写错,是否与Servlet的urlPatterns一致检查Servlet的urlpattern有没有写错(如写成name),检查doPost、doGet是否正常运行 注:IDEA新建Servlet时,默认的WebServlet注解中name需要改urlPatterns&…...

宁夏众智科技OA办公系统存在SQL注入漏洞

漏洞描述 宁夏众智科技OA办公系统存在SQL注入漏洞 漏洞复现 POC POST /Account/Login?ACTIndex&CLRHome HTTP/1.1 Host: Content-Length: 45 Cache-Control: max-age0 Origin: http://39.105.48.206 Content-Type: application/x-www-form-urlencoded Upgrade-Insecur…...

Spring邮件发送:配置与发送邮件详细步骤?

Spring邮件发送教程指南?怎么用Spring邮件发送服务? Spring框架提供了强大的邮件发送支持,使得开发者能够轻松地在应用程序中集成邮件发送功能。AokSend将详细介绍如何在Spring应用中配置和发送邮件,帮助开发者快速掌握这一关键技…...

iPhone/iPad技巧:如何解锁锁定的 iPhone 或 iPad

“在我更新 iPhone 上的软件后,最近我遇到了iPhone 被锁定到所有者的消息,该如何解决?” 根据我们的研究,许多用户在 iOS 18 更新或恢复出厂设置后都会遇到同样的问题。只要出现问题,您就无法使用 iPhone 或 第 1 部分…...

无源码实现免登录功能

因项目要求需要对一个没有源代码的老旧系统实现免登录功能,系统采用前后端分离的方式部署,登录时前端调用后台的认证接口,认证接口返回token信息,然后将token以json的方式存储到cookie中,格式如下: 这里有…...

大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

疾风大模型气象,基于气象数据打造可视化平台

引言 随着气象数据的广泛应用,越来越多的行业依赖天气预报与气候分析来做出决策。从农业、航空、能源到物流,气象信息无时不刻影响着各行各业的运作。然而,气象数据本身复杂且多样,如何将这些数据转化为直观、易于理解的图形和信…...

PHP安装后Apache无法运行的问题

问题 按照网上教程php安装点击跳转教程,然后修改Apache的httpd.conf文件,本来可以运行的Apache,无法运行了 然后在"C:\httpd-2.4.62-240904-win64-VS17\Apache24\logs\error.log"(就是我下载Apache的目录下的logs中&am…...

[论文精读]Multi-Channel Graph Neural Network for Entity Alignment

论文网址:Multi-Channel Graph Neural Network for Entity Alignment (aclanthology.org) 论文代码:https:// github.com/thunlp/MuGNN 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&a…...

Study-Oracle-10-ORALCE19C-RAC集群搭建(一)

一、硬件信息及配套软件 1、硬件设置 RAC集群虚拟机:CPU:2C、内存:10G、操作系统:50G Openfile数据存储:200G (10G*2) 2、网络设置 主机名公有地址私有地址VIP共享存储(SAN)rac1192.168.49.13110.10.10.20192.168.49.141192.168.49.130rac2192.168.49.13210.10.10.3…...

1.8 物理层下的传输媒体

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 1 导引型传输媒体1.1 双绞线1.2 同轴电缆1.3 光缆 2 非导引型传输媒体2.1 无线电微波通信2.2 多径效应2.3 卫星通信2.4 无线局域网 在数据通信系统中,传输媒体是发…...

指纹定位的原理与应用场景

目录 原理 1. 信号特征收集 2. 定位算法 推导公式 距离估算公式 定位算法公式 使用场景 发展前景 指纹定位是一种基于无线信号强度(如Wi-Fi、RFID、蓝牙等)来实现室内定位的技术。它借助于环境中多个基站的信号特征来推断用户的位置。以下是对指纹定位的详细讲解,包…...

发现一款适合所有用户小巧且强大的编辑器(完美替换Windows记事本)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 编辑器 📒📝 功能亮点📝 适用场景📝 安装使用📝 替换Windows记事本🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 今天,发现一款小巧(仅1.26M)且功能强大的编辑器,适用于文本编辑,编程开发等,应该说是适…...

Mysql知识点整理

一、关系型数据库 mysql属于关系型数据库,它具备以下特点 关系模型:数据以二维表格形式存储,易于理解和使用。 数据一致性:通过事务处理机制(ACID特性:原子性、一致性、隔离性、持久性)保证数据…...

ISA-95制造业中企业和控制系统的集成的国际标准-(4)

ISA-95 文章目录 ISA-95ISA-95 & MES一、ISA-95是MES的系统标准二、ISA-95对MOM/MES的活动定义三、MES/MOM如何遵循ISA-95四、MES/MOM功能划分和边界定义 ISA-95 & MES ISA-95 作为企业系统与控制系统集成国际标准,提供了一个通用的框架,有助于…...

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...