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

openpyxl库详细介绍十分全面

openpyxl 是一个非常流行的 Python 库,用于读写 Excel 2007 及更新版本的 .xlsx 文件。它可以处理 Excel 文件的创建、修改、读取等操作,并且支持 Excel 的许多高级功能,如公式、图表、条件格式、筛选等

安装 openpyxl

要使用 openpyxl,首先需要安装它:

pip install openpyxl

基本概念

在使用 openpyxl 之前,了解一些基本的概念是很有帮助的:

  • Workbook(工作簿):Excel 文件本身就是一个工作簿。
  • Worksheet(工作表):工作簿中包含的单个表格。
  • Cell(单元格):工作表中的最小数据单元。
  • Row(行)和 Column(列):单元格是通过行和列的组合进行定位的。

操作 Excel 文件的基本步骤

1. 创建和保存 Excel 文件

可以使用 openpyxl 创建一个新的工作簿,并保存为 .xlsx 文件:

from openpyxl import Workbook# 创建一个新的工作簿
wb = Workbook()# 获取默认的工作表
ws = wb.active# 给工作表命名
ws.title = "MySheet"# 写入数据到单元格
ws['A1'] = "Hello"
ws['B1'] = "World"# 保存工作簿
wb.save("example.xlsx")

2. 打开和读取 Excel 文件

可以使用 load_workbook 函数来加载现有的 Excel 文件,并读取其中的数据:

from openpyxl import load_workbook# 加载已有的工作簿
wb = load_workbook("example.xlsx")# 获取活动的工作表
ws = wb.active# 读取单元格的数据
a1_value = ws['A1'].value
b1_value = ws['B1'].valueprint(f"A1: {a1_value}, B1: {b1_value}")

3. 操作工作表

可以在工作簿中添加、删除、获取工作表:

# 创建一个新的工作表
new_sheet = wb.create_sheet(title="NewSheet")# 删除一个工作表
wb.remove(new_sheet)# 获取所有工作表的名称
sheetnames = wb.sheetnames
print(sheetnames)

4. 操作单元格

可以直接使用单元格的位置(如 A1)进行读取和写入。也可以使用行列的数字索引:

# 使用行列索引来获取单元格
cell = ws.cell(row=1, column=1)
print(cell.value)# 写入数据到指定的单元格
ws.cell(row=2, column=2, value="New Value")

5. 操作行和列

可以对工作表的行和列进行批量操作:

# 访问一整行
row = ws[1]  # 第一行
for cell in row:print(cell.value)# 访问一整列
col = ws['A']  # 第一列
for cell in col:print(cell.value)# 访问多个单元格
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):for cell in row:print(cell.value)# 访问指定列和行
for col in ws.iter_cols(min_col=1, max_col=3, min_row=1, max_row=2):for cell in col:print(cell.value)

6. 公式与表达式

openpyxl 支持在单元格中使用公式:

# 写入公式
ws['C1'] = "=SUM(A1:B1)"# 读取公式结果(需要重新计算后保存)
result = ws['C1'].value
print(result)

注意,openpyxl 不会自动计算公式的结果;它只会保存公式。要查看公式的计算结果,通常需要打开 Excel 或使用支持计算公式的库。

7. 样式和格式化

可以使用 openpyxl 对单元格进行样式设置,包括字体、颜色、边框、对齐等:

from openpyxl.styles import Font, Color, Alignment# 设置列宽
ws.column_dimensions['A'].width = 20# 设置行高
ws.row_dimensions[1].height = 30# 设置字体样式
ws['A1'].font = Font(name='Arial', size=14, bold=True, color='FF0000')# 设置单元格对齐,支持换行
ws['A1'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)# 设置单元格颜色
ws['A1'].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")# 设置渐变填充
gradient_fill = PatternFill(fill_type="linear", start_color="FF0000", end_color="FFFFFF")
ws['B2'].fill = gradient_fill# 隐藏列
ws.column_dimensions['A'].hidden = True# 隐藏行
ws.row_dimensions[1].hidden = True# 取消隐藏列
ws.column_dimensions['A'].hidden = False# 取消隐藏行
ws.row_dimensions[1].hidden = False

8. 图表

openpyxl 支持创建和插入图表:

from openpyxl.chart import BarChart, Reference# 创建一个柱状图
chart = BarChart()
data = Reference(ws, min_col=1, min_row=1, max_col=2, max_row=2)
chart.add_data(data, titles_from_data=True)# 插入图表到工作表
ws.add_chart(chart, "E5")

9. 保护工作表

可以设置密码来保护工作表,防止未经授权的编辑:

ws.protection.password = 'mysecretpassword'
ws.protection.sheet = True

10. 处理合并单元格

可以合并和拆分单元格:

# 合并单元格
ws.merge_cells('A1:B1')# 拆分合并的单元格
ws.unmerge_cells('A1:B1')

总结

openpyxl 是一个强大且灵活的工具,可以帮助你通过 Python 脚本处理 Excel 文件。无论是简单的读写操作,还是复杂的数据处理、格式化和图表创建,openpyxl 都可以胜任。以上示例涵盖了基本的功能,但 openpyxl 还支持更多高级操作,可以根据需要进一步探索和使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT-五子棋游戏
  • JavaScript 中的深拷贝新宠:structuredClone() 函数详解
  • 网络安全之xss靶场练习
  • 用py获取显卡的占用率
  • 【解压即玩】PC电脑版【漫威蜘蛛侠2】豪华中文版+通关存档+画质超棒,神作
  • MySQL——单表查询(二)按条件查询(11)OR 和 AND 关键字一起使用的情况
  • Springcloud从零开始--Eureka(一)
  • 九、 系统安全(考点篇)试题
  • 无人机飞手培训:考证、组装、维修技术详解
  • 深信服技术服务工程师面试全过程分享
  • 为什么Qt源码中要用d_ptr和q_ptr
  • 力扣223题详解:矩形面积的多种解法与模拟面试
  • 两个dp题
  • MyBatis 源码解读:专栏导读与学习路线
  • python模块 - os系统交互模块
  • (三)从jvm层面了解线程的启动和停止
  • 08.Android之View事件问题
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ECMAScript6(0):ES6简明参考手册
  • es6要点
  • Fundebug计费标准解释:事件数是如何定义的?
  • gulp 教程
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Redis学习笔记 - pipline(流水线、管道)
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Sublime text 3 3103 注册码
  • Unix命令
  • vuex 学习笔记 01
  • 分布式事物理论与实践
  • 盘点那些不知名却常用的 Git 操作
  • 算法---两个栈实现一个队列
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 积累各种好的链接
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(帮助手册)
  • #宝哥教你#查看jquery绑定的事件函数
  • #在 README.md 中生成项目目录结构
  • (160)时序收敛--->(10)时序收敛十
  • (2)空速传感器
  • (2015)JS ES6 必知的十个 特性
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (3)nginx 配置(nginx.conf)
  • (zt)最盛行的警世狂言(爆笑)
  • (阿里云万网)-域名注册购买实名流程
  • (二)构建dubbo分布式平台-平台功能导图
  • (翻译)terry crowley: 写给程序员
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)事件系统
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)大型网站架构演变和知识体系