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

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

图片

excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。

python之openpyxl快速读取Excel表内容

测开不得不会的python之xlrd库读取excel表内容

python之xlwt库编辑写入excel表内容

本次我们介绍使用openpyxl创建和编辑excel表。

官网文档:
https://openpyxl.readthedocs.io/en/stable/

官网显示,openpyxl是一个用于读/写Excel2010后缀为XLSX/XLSM/XLTX/XLTM文件的python库。

了解下电脑中的excel表格文件格式

微软或者金山的excel表格编辑保存时一般要选择文件后缀,有xls和xlsx两类。

xls和xlsx后缀文件的主要区别:

  • 文件格式:xls是二进制格式,而xlsx是基于XML的压缩方式。

  • 版本:xls是Excel 2003及以前版本生成的文件格式,而xlsx是Excel 2007及以后版本生成的文件格式。

  • 兼容性:xlsx格式向下兼容,而xls格式不支持向后兼容。

安装openpyxl库

pip install openpyxl -i https://mirrors.aliyun.com/pypi/simple/

目前最新版本3.1.5,安装后目录结果如下,初始化文件__init__.py文件如下:

图片

使用openpyxl库

初始化文件__init__.py文件已经导入了Workbookl类:

图片

该函数用于创建和编辑excel表,使用时我们只需要通过如下命令直接导入即可:

from openpyxl import Workbook

该Workbook类可以创建和操作sheet页对象(class为openpyxl.worksheet. worksheet.Worksheet),通过sheet对象不同的函数来编辑表格中的内容。

创建并编辑,保存Excel表

1导入openpyxl库的Workbook类

from openpyxl import Workbook

2用一个图展示下编辑表格常用的函数(WorkBook和Worksheet类中的函数)

图片

3操作sheet对象

首先我们先初始化Workbook对象

wb = Workbook()

我们编辑表格,其实编辑的都是表格下方的sheet页,所以我们初始化后要先创建sheet页对象,当然也可以复制,删除,移动,复制sheet页对象。

a 创建sheet对象

1)使用wb.active属性函数获取sheet对象

#获取表格sheet页,一般是默认第1个,也可以选择其他并保存后,获取的就是保存后的sheet页对象
sheet = wb.active

2)使用create_sheet函数创建sheet对象

图片

  • 参数title代表 sheet页的名称,可以不填。

  • 参数index:传值时代表创建第几个sheet页;不传值时,则按照顺序依次创建。

测试代码:创建三个sheet页对象

wb = Workbook()
sheet0 = wb.create_sheet('sheet0',0)
sheet1 = wb.create_sheet('sheet1',1)
sheet2 = wb.create_sheet('sheet2')

b 获取sheet对象

1)当创建了多个sheet对象后,可指定获取第N个sheet页对象

wb.active = 1
sheet = wb.active

2)使用wb._sheets获取所有sheet页对象列表,并通过index获取单个sheet页对象

sheet = wb._sheets[0]

3)使用wb.sheetnames获取所有sheet页名称,并通过wb[sheetname]获取sheet页对象

sheetnames = wb.sheetnames
print(sheetnames )
sheet = wb['functions']

4)使用wb.worksheets获取所有sheet页对象列表,并通过index获取单个sheet页对象

print(wb.worksheets)
sheet = wb.worksheets[0]

c 复制sheet页对象

函数copy_worksheet传入已存在的sheet对象,并复制一个对象。

图片

测试代码:

wb = Workbook()
sheet0 = wb.active
sheet1 = wb.copy_worksheet(sheet0)
wb.save(‘1.xlsx’) #保存文件

结果:

图片

d 删除sheet对象

有2种方式删除sheet对象:

wb.remove(worksheet) or del wb[sheetname]

图片

测试代码:

wb = Workbook()
#先创建三个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
sheet1 = wb.create_sheet('sheet1',1)
sheet2 = wb.create_sheet('sheet2')
#删除两个对象
wb.remove(sheet0)
del wb['sheet1']
wb.save(‘2.xlsx’) #保存文件

结果:sheet0和sheet1被删除

图片

e move_sheet:用于移动对象

函数move_sheet可以将sheet对象移动offsheet偏移量。

参数sheet可以传sheet对象或者sheet的名称。

图片

测试代码:

wb = Workbook()
#先创建三个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
sheet1 = wb.create_sheet('sheet1',1)
sheet2 = wb.create_sheet('sheet2')
#移动两个对象
wb.move_sheet(sheet0,3)
wb.move_sheet('sheet1',4)
wb.save('3.xlsx') #保存文件

结果:sheet0和sheet1移动到了右边位置

图片

4 编辑sheet页

a cell()函数:设置单元格的值

cell函数的参数:

  • row代表第几行,column代表第几列,需要大于等于1,都则会报错,
  • value参数如果传值会设置为该单元格的值

图片

以上函数返回的是单元格对象,class为openpyxl.cell.cell.Cell

图片

Cell对象的几个属性:

  • value :单元格的值
  • row:单元格所在的行数
  • column:单元格所在的列数
  • data_type:单元格内容对应的数据类型

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#填入第1行第1列和第1行第2列的值
sheet0.cell(1,1,'hello')
sheet0.cell(1,2,'python')
wb.save('3.xlsx') #保存文件

结果:

图片

b 像设置列表元素一样输入和删除单元格的值

之前文章我们讲过(python中类class的魔法方法),在类中实现了__getitem__、__setitem__,__delitem__魔法方法,我们就可以对该类的对象,像使用list列表一样获取、设置、删除元素。

图片

  • 按照如下格式输入单元格内容:sheet0['A1'] =‘hello’

  • 按照如下格式删除单元格内容:del sheet0['B1']

解释:A1代表第1列第1行的单元格,B1代表第2列第1行的单元格; 相信大家已经清楚的知道字母代表列,数字代表行(跟我们打开表格看到的是一样的)

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#填入第1行第1列和第1行第2列的值
sheet0['A1'] = 'hello'
sheet0['B1'] = 'python'
del sheet0['B1'] 
wb.save('4.xlsx') #保存文件

结果:单元格B1的内容又被删掉了

图片

c append()函数:按行批量添加可迭代对象的元素

通过下图可知,参数需要为可迭代对象:列表/元组/字典等,默认从第1行开始写入;

如果为字典,则字典的key需要满足大写字母A到ZZZ,或者为数字,代表在第几列输入字典的value。

图片

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#设置列表和字典变量
data1 = ['hello','python','my','friend']
data2 = {'A':'hello','C':'python'}
data3 = {1:'hello',2:'python',4:'friend'}
sheet0.append(data1)
sheet0.append(data2)
sheet0.append(data3)
wb.save('6.xlsx') #保存文件

结果:

图片

d 插入/删除行和列

insert_rows,insert_cols,delete_rows,delete_cols四个函数分别代表插入行/插入列/删除行/删除列

参数都是有两个idx和amount:

  • idx代表插入或者删除的位置
  • amount代表插入或者删除的数量(amount值>=1)

图片

图片

比如 insert_rows(2,3) 代表在第2行上面插入3行

比如 insert_cols(2,3) 代表在第2列左面插入3列

比如 delete_rows(5,3) 代表在第5行上面删除3行

比如 delete_cols(5,3) 代表在第5列左面删除3列

e move_range:移动一个范围内的单元格

图片

move_range 方法需要几个参数:

  • cell_range:一个字符串,表示要移动的单元格范围(例如 'A1:C3')。
  • rows:一个整数,表示要向下移动的行数(正数表示向下,负数表示向上)。
  • cols:一个整数,表示要向右移动的列数(正数表示向右,负数表示向左)。

注意:移动时单元格会被覆盖,请务必小心。

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#设置列表和字典变量
data1 = ['hello','python','my','friend']
data2 = {'A':'hello','C':'python'}
data3 = {1:'hello',2:'python',4:'friend'}
sheet0.append(data1)
sheet0.append(data2)
sheet0.append(data3)
#移动一个范围
sheet0.move_range('A1:C1',2,3)
wb.save('6.xlsx') #保存文件

f merge_cells函数用于合并单元格

合并后的单元格将拥有合并前单元格的数据和样式,并且可以跨越多个行和列。合并单元格可能会导致原有数据丢失,大家要慎重使用。

图片

参数介绍:

  • range_string:指定要合并的单元格区域,例如'A1:B2'表示合并从A1到B2的单元格区域。
  • 其他四个参数:分别表示合并的起始行、起始列、结束行和结束列。比如(1, 1, 3,2)表示合并第1行第1列到第3行第2列的单元格。

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#设置列表和字典变量
data1 = ['hello','python','my','friend']
data2 = {'A':'hello','C':'python'}
data3 = {1:'hello',2:'python',4:'friend'}
sheet0.append(data1)
sheet0.append(data2)
sheet0.append(data3)
#以下两种方式 同样的效果
sheet0.merge_cells('A1:C2')
sheet0.merge_cells(start_row=1,start_column=1,end_row=3,end_column=2)
wb.save('6.xlsx') #保存文件

结果:

图片

g unmerge_cells 取消合并单元格

跟merge_cells函数功能相反,取消合并的单元格,参数跟merge_cells一致,参考上面的介绍

图片

h 属性函数最大行/最大列/最小行/最小列

max_row: 代表最大行

max_column:代表最大列

min_row: 代表最小行

min_column:代表最小列

图片

测试代码:

wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#设置列表和字典变量
data1 = ['hello','python','my','friend']
data2 = {'A':'hello','C':'python'}
data3 = {1:'hello',2:'python',4:'friend'}
sheet0.append(data1)
sheet0.append(data2)
sheet0.append(data3)
#打印最大行 最大列等信息
print(f'max_row: {sheet0.max_row}')
print(f'max_colunn: {sheet0.max_column}')
print(f'min_row: {sheet0.min_row}')
print(f'min_column: {sheet0.min_row}')
wb.save('6.xlsx') #保存文件

结果:

max_row: 3

max_colunn: 4

min_row: 1

min_column: 1

​​​​​​​i add_image:在单元格中添加图片

  • 参数image需要传入一个image对象,而不是某个图片;
  • anchor填入单元格位置,比如“A1”

image对象依赖另一个库pillow,我们先安装这个库:

pip install pillow -i ​​​​​​​https://mirrors.aliyun.com/pypi/simple/

测试代码:

from openpyxl.drawing.image import Image
from openpyxl import Workbook
wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#定义image对象imageins = Image('xxxx.jpg')#在单元格A1处添加图片
sheet0.add_image(imageins,'A1')
wb.save('6.xlsx')  #保存文件

共勉:东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,点个赞和关注吧,谢谢大家。

相关文章:

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。 python之open…...

go语言怎么实现bash cmd里的mv功能?

在Go语言中实现类似于Bash命令行中的mv命令的功能,主要是通过文件系统的操作来完成的。mv命令可以用来移动文件或目录,也可以用来重命名文件或目录。在Go语言中,可以使用标准库中的os和io/ioutil包来实现这些功能。 以下是一个简单的例子&…...

Vue前端面试进阶(五)

使用Element UI开发的实际项目 在实际项目中,我使用Element UI来快速构建用户界面。Element UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的桌面端组件库,它提供了丰富的UI组件,极大地提高了开发效率。然而,在使用过程中…...

面试手撕题积累

1、实现滑动窗口限流,允许每分钟最多有100个请求 阿里一面题。 核心: 时间窗口管理:滑动窗口会根据时间流逝不断更新,需要记录请求的时间戳,并根据当前时间计算窗口内的请求数量。 限流判断:每次请求到来…...

notepad++文件github下载

1、github下载网址:Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件: 3、CSDN下载链接:https://download.csdn.net/download/u013083576/90046203...

.NET新知识点笔记

using 用法介绍 using (SqlCommand cmd new SqlCommand(SQLString, connection)) 为什么使用上面的using 而不直接使用下述的来直接 SqlCommand cmd new SqlCommand(SQLString, connection)如果你需要使用一个对象,这个对象需要占用很多紧缺的资源&am…...

数据结构:链表进阶

链表进阶 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题4.LinkedList的使用5.1 什么是LinkedList4.2 LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素&#xff1…...

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。 1. 什么是网络爬虫? 网络爬虫&#x…...

Java面试题、八股文——JVM篇最终篇

1.如何选择垃圾收集器? 选择合适的垃圾收集器(Garbage Collector, GC)对于优化Java应用程序的性能至关重要。不同的应用场景和系统需求可能需要不同类型的垃圾收集器来满足。以下是一些考虑因素以及常见的垃圾收集器选项,帮助您做…...

Spring Boot整合Redis Stack构建本地向量数据库相似性查询

Spring Boot整合Redis Stack构建本地向量数据库相似性查询 在微服务架构中,数据的高效存储与快速查询是至关重要的。Redis作为一个高性能的内存数据结构存储系统,不仅可以用作缓存、消息代理,还可以扩展为向量数据库,实现高效的相…...

shell脚本基础学习_总结篇(完结)

细致观看可以,访问shell脚本学习专栏,对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义: 2. 主要特点: 3. shell脚本的基本结构 4. S…...

什么是 C++ 中的函数对象?它有什么特点?

在 C 中,函数对象(Function Object)是一种可调用对象,它允许像函数一样被调用,但实际上它可能并不是真正的函数。函数对象可以是以下几种类型之一: 普通函数: 一个普通的、定义在命名空间或类…...

css:项目

这是一个完整的网站制作的流程 美工会先制作一个原型图: 原型图写的不详细,就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发:把代码的不同的样式封装起来,需要用到相同样式的标签就…...

macOS 开发环境配置与应用开发指南

macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统,因其稳定性、优雅的用户界面和强大的开发支持,已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用,还是Web应用、跨平台程序,macOS都提…...

[A-19][V06]ARMv8/v9-内存虚拟化原理

ver0.2 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 前一篇文章,我们介绍了ARM内存的属性,算是一个小小的里程碑点,接下来我们会把注意力重新拉回虚拟化的赛道。我们从[V-05] 虚拟化基础-异常模型(Exception model)之后,花了很多笔墨介绍…...

registry 删除私有仓库镜像

原文链接:https://blog.csdn.net/yogima/article/details/122172744 如果需要彻底删除,只需进行register 磁盘删除镜像 彻底删除了,就可以到达彻底删除的目的。 如果只需要软删除,则只需进行通过API删除。 curl --header "Ac…...

UPLOAD LABS | UPLOAD LABS 靶场初识

关注这个靶场的其它相关笔记:UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01:UPLOAD LABS 靶场简介 UPLOAD LABS 靶场是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列文件上传漏洞的实验环境,用于帮助用户了解文件上传漏洞的…...

Samba服务器常见问题处理

指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请断开所有现有的连接到网络共享的映射 解决方案 单击“开始”菜单,选择“运行…”。 在弹出的窗口中,输入cmd 进入命令行模式,并输入…...

Java基础 设计模式——针对实习面试

目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式(Singleton Pattern) 定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。适用场景&…...

最大公约数和最小公倍数-多语言

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析: 最小公倍数输入的两个数之积除于它们的最大公约数,关键是求出最大公约数; 求最大公约数用辗转…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

抽象类和接口(全)

一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...