python文件处理-Excel自动处理(使用 openpyxl)

简介: python文件处理-Excel自动处理(使用 openpyxl)

openpyxl简介


openpyxl是Eric Gazoni和Charlie Clark联合开发,用来处理Excel电子表格的Python第三方库。因为它是第三方库,所以需要根据系统环境,在本地使用正确的命令来安装这个库,命令如下所示:


Windows系统:pip install openpyxl


MacOS系统:pip3 install openpyxl


openpyxl库可以处理Excel2010以后的电子表格格式,包括:xlsx/xlsm/xltx/xltm


openpyxl的导入


要使用openpyxl库,需要先导入,一起来看看下面的代码。

import openpyxl
# 通过文件路径,打开工作簿
wb1 = openpyxl.load_workbook('./demo_excel.xlsx')
# 用 Workbook() 创建新工作簿
wb2 = openpyxl.Workbook()

在上面的代码里,我们先用import直接导入了openpyxl库,然后用openpyxl.load_workbook()打开已有工作簿,用openpyxl.Workbook()创建新工作簿。


但是每次使用我们都要带openpyxl.,这样就有点儿麻烦。


为了方便,今天我教你一个新的导入方式:from…import…。


from…import…是import语句的一个变体,可以导入库或模块中的函数、方法、类或变量。


语法为:from 库/模块 import 函数/方法/类/变量。


可以用from…import…一行导入多个名字,不同名字间用逗号分隔。


例如:from 库/模块 import 函数1, 类1。


所以上面的代码就可以被改写为:

from openpyxl import load_workbook, Workbook
# 通过文件路径,打开已有工作簿
wb1 = load_workbook('./demo_excel.xlsx')
# 用 Workbook() 创建新工作簿
wb2 = Workbook()

注意第一行代码,写为from openpyxl import load_workbook, Workbook,接下来就可以直接使用被导入的函数/方法/类/变量。


excel表格操作


通常,手动操作的顺序可以被总结为:


1.打开工作簿


2.确认工作表


3.操作单元格


我会按照手动操作的顺序来讲解openpyxl的相关知识,可参考下图。

1.png

根据openpyxl的定义,一个.xlsx格式的Excel文件就代表了一个工作簿对象,那么我们先来学习获取工作簿对象的方式,然后再学习工作簿对象的一些基本操作。


如何获取工作簿对象


load_workbook(filename)


获取工作簿对象的第一种方式你肯定不陌生,需要使用openpyxl库中的一个函数load_workbook(filename),参数filename代表了工作簿的路径,即.xlsx文件的路径。这个函数会返回一个工作簿对象。


Workbook()


我们还可以通过实例化Workbook类来获取工作簿对象,更准确地来说,这是一种创建工作簿对象的方式。


语法很简单,写为Workbook()即可,括号里面不需要写任何参数。


以上就是获取工作簿对象的两种途径,下面来介绍工作簿对象的相关基本操作。


工作簿对象的操作


save(filename)


刚才,我们通过实例化Workbook类成功新建了一个工作簿对象,如果要把新建的工作簿对象保存到本地,就需要使用工作簿对象的方法save()。


语法为:工作簿对象.save(filename),参数filename表示新工作簿的文件路径,这里我推荐以.xlsx作为新工作簿的路径结尾。


通过load_workbook(filename)获取到的工作簿对象也可以使用方法save(filename)。


如果参数filename不变,即保存在原有路径,相当于修改原文件;若参数filename变化,即保存在新的路径,相当于另存为新的文件。


用图片来总结一下:

2.png

如何获取工作表对象


工作表就是工作簿中,位于下方的标签。在实际操作中,我们可以通过点击不同的标签,来选择不同的工作表。

3.png

现实中的工作表,在openpyxl中对应着工作表对象(Worksheet对象)。

一个工作表对象(Worksheet对象)就表示工作簿中的一张工作表。


active属性


active会获取到活动的工作表,何为活动的工作表呢?


通常情况下,活动工作表是指当前正选中的工作表,打开一个.xlsx文件后,默认显示的工作表即为活动工作表。


按表名取表


如果我们已知工作表的名称,就可以以表名为索引,用工作簿对象[‘表名’]的方式取到指定的工作表对象。一般情况下,如果工作簿中存在多张工作表,且我们知道这些工作表的名称,就可以采用按表名取表这种方式。


对比以下两种获取工作表对象的方式,你可以根据实际需要自行决定使用哪一种写法。

4.png

工作表对象的基本操作


获取单行或单列


在Excel表格中,使用数字表示行数,用英文字母表示列名。


在openpyxl中,我们可以通过工作表对象[行数]或工作表对象[‘列名’]的方式获取到一个元组,这个元组中包含了指定行或列中的所有数据。


获取多行数据(iter_rows())


我们可以借助工作表对象的方法iter_rows()来得到表格中指定范围内的多行数据。


iter_rows()的语法如下图所示。


5.png

参数min_row和max_row分别表示最小行索引和最大行索引,最小行索引的值默认为1,最大行索引的值默认为表格中有数据的最下面一行的行数;


参数min_col和max_col分别表示最小列索引和最大列索引,最小列索引的值默认为1,最大列索引的值默认为表格中有数据的最右面一列的列数;


参数values_only决定是否返回单元格的值,如果为True则返回单元格的值,如果为False则返回单元格对象。通常情况下,只读数据时,需要将该参数设置为True,要写入数据时,保持其为默认的False就好。


工作表对象的方法iter_rows()会返回一个可迭代对象,该对象中有n个元组,n为参数中指定的行数,每一个元组都代表了表格中的一行。


因此,通常情况下,iter_rows()会和for循环结合使用,从而使得我们取出其返回的可迭代对象中的每一个元组,即表格中指定范围内的每一行数据。


iter_rows()方法规定,如果指定的行中没有数据,就会返回一个空的元组。


当参数values_only保持其默认的False时,iter_rows()方法会返回指定范围内的单元格对象,单元格对象中除了有值,还有格式等一系列的属性。


添加数据

我们可以使用工作表对象的append()来添加一行数据,相信这个方法你一点都不陌生。


该方法可将部分可迭代对象(常见的如列表、元组)添加到工作表对象中,即给表格的末尾追加一行数据。


语法也很简单,写为工作表对象.append(列表/元组)即可。


不过需要注意的是,使用append()添加完数据后,如果想要在本地的Excel文件中看到添加后的数据,就一定要将工作簿保存下来,即使用工作簿对象的方法save()。


具体的写法你可以参考下面的代码。

from openpyxl import load_workbook
# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./公司人员名单.xlsx')
# 获取活动工作表
active_ws = staff_wb.active
info_list = ['S1911', '萧爵瑟', 3000, '内容']
info_tuple = ('S1912', '吴琐薇', 5000, '销售')
active_ws.append(info_list)
active_ws.append(info_tuple)
# 保存工作簿为【append_demo.xlsx】
staff_wb.save('./append_demo.xlsx')
————————————————
版权声明:本文为CSDN博主「大师兄6668」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41308872/article/details/131458711

上面的代码中,添加了两行数据,两行数据分别为列表和元组,并且它们确实是被添加到了工作表的最后。如果你在本地运行了上面的代码,就会生成对应的xlsx文件【append_demo.xlsx】。

6.png

知识点小结

7.png

单元格对象


单元格对象代表工作表中的一个单元格。


如下图所示:

8.png

基本上所有对于行列的操作,最终都可以回归为对单元格的操作。


如何获取单元格对象


第一种:通过iter_rows()来获取指定范围的行,再通过索引从行中取出单元格对象。


通过for row in 工作表对象.iter_rows()来获取指定范围的行,当参数values_only为默认的False时,我们得到的row就是一个个由单元格对象组成的元组,可以通过索引或者for循环遍历的方式来获取单独的单元格对象。


示例图:

9.png

第二种:通过行数或者列名来指定具体的行或列,然后通过for循环遍历获取指定行或列中的每一个单元格对象。


for cell in 工作表对象[行数]


for cell in 工作表对象[‘列名’]

from openpyxl import load_workbook
# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active
# for循环遍历,取出第三行的所有单元格对象
for row_cell in staff_ws[3]:
    print(row_cell)
# for循环遍历,取出第三列(C列)的所有单元格对象
for col_cell in staff_ws['C']:
    print(col_cell)
————————————————
版权声明:本文为CSDN博主「大师兄6668」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41308872/article/details/131458711

代码输出了指定行列的所有单元格对象。

10.png

第三种:通过单元格坐标来指定具体的单元格


直接通过工作表对象[‘单元格坐标’]来获取具体的单元格对象,比如工作表对象[‘A1’]就会获取到表格中,A1那个单元格对应的单元格对象。


示例代码:

from openpyxl import load_workbook
# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active
# 打印单元格对象A1
print(staff_ws['A1'])

输出结果:

bash:root$ python /home/python-class/root/main14.py
<Cell '下半年公司名单'.A1>

单元格对象的基本操作


value属性


借助单元格对象的属性value,我们就可以得到具体的数据;同时,我们也可以通过这个属性给单元格对象赋值(修改单元格的值或给单元格添加值)。

具体的写法如下:

# 获取单元格的值
单元格对象.value
# 给单元格对象赋值
单元格对象.value = 值

示例:

from openpyxl import load_workbook
# 打开【公司人员名单.xlsx】工作簿
staff_wb = load_workbook('./codes/material/公司人员名单.xlsx')
# 获取活动工作表
staff_ws = staff_wb.active
# 打印单元格对象C2的值
print(staff_ws['C2'].value)
# 修改单元格对象C2的值为10000
staff_ws['C2'].value = 10000
# 打印修改后的单元格对象C2的值
print(staff_ws['C2'].value)
# 将结果保存为【公司人员名单_new.xlsx】
staff_wb.save('./codes/material/公司人员名单_new.xlsx')

通过第8行代码,我们打印出了单元格C2原有的值8000。


第11至15行,我们通过单元格对象.value将10000赋值给单元格C2,改变了其原有的值,并将修改后的结果打印了出来。


效果如下图所示:

11.png

小结


13.png

知识点总结


思维导图总结一下

14.png

重难点总结:

15.png

相关文章
|
10天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
3天前
|
Python
使用OpenPyXL库实现Excel单元格其他对齐方式设置
本文介绍了如何使用Python的`openpyxl`库设置Excel单元格中的文本对齐方式,包括文本旋转、换行、自动调整大小和缩进等,通过具体示例代码展示了每种对齐方式的应用方法,适合需要频繁操作Excel文件的用户学习参考。
126 85
使用OpenPyXL库实现Excel单元格其他对齐方式设置
|
7天前
|
数据可视化 Python
使用OpenPyXL在Excel中创建折线图:数据可视化入门
本文介绍了如何使用Python的`openpyxl`库在Excel中创建折线图,包括安装库、加载Excel文件、定义数据范围、设置图表属性(如标题、轴标签)及保存文件等步骤,适合数据可视化初学者。
35 15
|
7天前
|
BI Python
利用OpenPyXL实现Excel条件格式化
本文介绍如何使用Python的`openpyxl`库为Excel文件添加条件格式,包括颜色渐变、图标集、数据条及基于公式的规则等,提升数据可读性和美观度。通过具体示例,展示了从安装库、加载文件到应用各种条件格式的详细过程,最后保存修改后的文件。
31 12
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
85 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
7天前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
18 0
|
2月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
63 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
2月前
|
Python
python读写操作excel日志
主要是读写操作,创建表格
64 2
|
2月前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
83 0
|
2月前
|
存储 Python
Python实战项目Excel拆分与合并——合并篇
Python实战项目Excel拆分与合并——合并篇
63 0