阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用openpyxl处理表格数据

298次阅读
没有评论

共计 6632 个字符,预计需要花费 17 分钟才能阅读完成。

导读 你们都一定在生活中的某个时候使用过 Excel,并且一定觉得需要自动化在本教程中,我们将学习如何使用 Python 处理 Excel 一些重复或乏味的任务。

Openpyxl 是一个 Python 库,它提供了各种使用 Python 与 Excel 文件交互的方法。它允许读、写、算术运算、绘制图形等操作。

在 Centos8 中安装方式如下:

[root@localhost ~]# yum -y install python3-openpyxl
从 Excel 表格中读取数据

如果要读取 Excel 文件,必须使用 load_workbook() 方法打开电子表格。之后可以使用 active 来选择第一个可用的工作表,并通过传递 row 和 column 参数使用 cell() 属性来选择单元格。value 属性返回特定单元格的值。请参阅下面的示例以获得更好的理解。

注意:第一行或第一列整数是 1,而不是 0。

下面的数据可以保存在 excel 表格文件中,用来做下面的实验,文件名称为wb.xlsx

Name Course Branch Semester
Ankit B.Tech CSE 4
Rahul M.Tech CSE 2
Priya MBA HR 3
Nikhil B.Tech CSE 4
Nisha B.Tech Biotech 5

 

[root@localhost data]# python3

# 导入 openpyxl 库
>>> import openpyxl
# path 变量指定表格文件的位置
>>> path = "/data/wb.xlsx"
# 加载表格文件
>>> wb_obj = openpyxl.load_workbook(path)
# 激活默认的工作表
>>> sheet_obj = wb_obj.active
# 选择第一行第一列的单元格,也就是 A1 单元格
>>> cell_obj = sheet_obj.cell(row = 1, column = 1)
# 打印单元格所属位置
>>> print(cell_obj)
<cell 'Sheet1'.A1>
# 打印 A1 单元格的值
>>> print(cell_obj.value)
Name

使用 openpyxl 处理表格数据

从多个单元格读取数据

从多个单元格中读取数据的方式有两种。

方法一:我们可以分别使用 max_rowmax_column 获得总行数和总列数。我们可以在 for 循环中使用这些值来根据情况获取所需行或列或任何单元格的值。让我们看看如何获取第一列和第一行的值。

# 使用 max_row 获取工作表有多少行的数据
>>> row = sheet_obj.max_row
# 使用 max_column 获取工作表有多少列的数据
>>> column = sheet_obj.max_column
# 打印行数
>>> print("Total Rows:", row)
Total Rows:  6
# 打印列数
>>> print("Total Cols:", column)
Total Cols:  4

# 使用 for 循环打印第一列数据
>>> for i in range(1, row + 1):
...   cell_obj = sheet_obj.cell(row = i, column = 1)
...   print(cell_obj.value)
... 
Name
Ankit
Rahul
Priya
Nikhil
Nisha

# 使用 for 循环打印第二条数据:>>> for i in range(1, column + 1):
...   cell_obj = sheet_obj.cell(row = 3, column = i)
...   print(cell_obj.value, end = " ")
... 
Rahul M.Tech CSE 2

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据
方法二:我们还可以使用单元格名称从多个单元格中读取。这可以看作是 Python 的列表切片。

# 选中 A1 到 B6 的单元格
>>> cell_obj = sheet_obj['A1':'B6']
>>> 
# for 玄幻打印两列的数据
>>> for cell1, cell2 in cell_obj:
...   print(cell1.value, cell2.value)
... 
Name Course
Ankit B.Tech
Rahul M.Tech
Priya MBA
Nikhil B.Tech
Nisha B.Tech

使用 openpyxl 处理表格数据

写入表格数据

首先,让我们创建一个新的表格,然后我们将一些数据写入新创建的文件。可以使用 Workbook() 方法创建一个空的表格。让我们看看下面的例子。

[root@localhost data]# python3

# 导入 openpyxl 库里面的 Workbook
>>> from openpyxl import Workbook
>>> 
# 创建空的工作簿
>>> workbook = Workbook()
>>> 
# 保存文件
>>> workbook.save(filename="/data/sample.xlsx")
>>>

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据
创建一个空文件后,让我们看看如何使用 Python 向其中添加一些数据。要首先添加数据,我们需要选择活动工作表,然后使用 cell() 方法,我们可以通过传递行号和列号作为其参数来选择任何特定的单元格。我们也可以使用单元格名称进行书写。

# 获取激活的工作表
>>> sheet = workbook.active
>>> 
# 为 A1 添加 Hello 值
>>> c1 = sheet.cell(row = 1, column = 1, value = 'Hello')
# 为 B1 添加 World 值
>>> C2 = sheet.cell(row = 1, column = 2, value = 'World')
>>> 
# 为 A2 添加 Welcome 值
>>> C3  = sheet['A2'].value = 'Welcome'
# 为 B2 添加 Everyone 值
>>> C4 = sheet['B2'].value = 'Everyone'
>>> 
# 保存到文件
>>> workbook.save("/data/sample.xlsx")

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

附加数据到表格

在上面的示例中,您将看到每次尝试写入表格时,现有数据都会被覆盖,并且该文件将另存为新文件。发生这种情况是因为 Workbook() 方法总是创建一个新的工作簿文件对象。要写入现有工作簿,必须使用 load_workbook() 方法打开文件。

[root@localhost data]# python3

>>> import openpyxl
>>> 
# 使用 load_workbook 加载文件
>>> wb = openpyxl.load_workbook("/data/sample.xlsx")
>>> 
>>> sheet = wb.active
>>> 
>>> c = sheet['A3']
>>> 
>>> c.value = 'New Data'
>>> 
>>> wb.save("/data/sample.xlsx")

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据
我们还可以使用 append() 方法在工作表的末尾附加多个数据。

# 定义数据
>>> data = (... (1,2,3),
... (4,5,6)
... )
>>> 
# 使用 for 循环将内容附加到工作表中
>>> for row in data:
...   sheet.append(row)
... 
>>> wb.save('/data/sample.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

Excel 表格的算术运算

可以通过在电子表格的特定单元格中键入公式来执行算术运算。例如,如果我们想求和,则使用 Excel 文件的 =Sum() 公式。

[root@localhost data]# python3

>>> import openpyxl
>>> 
# 创建新工作簿
>>> wb = openpyxl.Workbook()
>>> 
>>> sheet = wb.active
>>> 
# 在单元格中写入数据
>>> sheet['A1'] = 200
>>> sheet['A2'] = 300
>>> sheet['A3'] = 400
>>> sheet['A4'] = 500
>>> sheet['A5'] = 619

# 在 A7 单元格求和
>>> sheet['A7'] = '=SUM(A1:A5)'
>>> 
# 保存文件名称为 sum.xlsx
>>> wb.save('/data/sum.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

调整单元格的行和列

工作表对象具有控制行高和列宽的 row_dimensionscolumn_dimensions 属性。工作表的 row_dimensionscolumn_dimensions 是类似字典的值;row_dimensions 包含 RowDimension 对象,column_dimensions 包含 ColumnDimension 对象。在 row_dimensions 中,可以使用行号(在本例中为 1 或 2)访问其中一个对象。在 column_dimensions 中,可以使用列的字母(在本例中为 A 或 B)访问其中一个对象。

[root@localhost data]# python3

# 导入模块
>>> import openpyxl
>>> 
# 创建新工作簿
>>> wb = openpyxl.Workbook()
>>> 
>>> sheet = wb.active
>>> 
# 向 A1 单元格写入数据
>>> sheet.cell(row = 1, column = 1, value = 'Hello')
<cell 'Sheet'.A1>
# 向 B2 单元格写入数据
>>> sheet['B2'].value = 'Everyone'
>>> 
# 设置第一行单元格高度为 45
>>> sheet.row_dimensions[1].height = 45
>>> 
# 设置 B 列单元格宽度为 70
>>> sheet.column_dimensions['B'].width = 70
>>> 
>>> wb.save('/data/h_and_w.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

合并单元格

可以使用 merge_cells() 方法将多个单元格合并为单个单元格。

[root@localhost data]# python3

>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active

# 合并 A2 到 D4 单元格,并添加数据
>>> sheet.merge_cells('A2:D4')
>>> sheet['A2'].value = 'Twelve cells join together.'
>>> 
# 合并 C6 到 D6 单元格,并添加数据
>>> sheet.merge_cells('C6:D6')
>>> sheet['C6'].value = 'Two merge cells.'
>>> 
>>> wb.save('/data/merge_cells.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

取消合并单元格

如要取消合并单元格,请用 unmerge_cells() 方法。

# 取消合并 A2 到 D4 单元格
>>> sheet.unmerge_cells('A2:D4')
>>> 
# 取消合并 C6 到 D6 单元格
>>> sheet.unmerge_cells('C6:D6')
>>> 
>>> wb.save('/data/merge_cells.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

设置字体样式

要自定义单元格中的字体样式,重点是从 openpyxl.styles 模块导入 Font() 函数。

[root@localhost data]# python3

>>> import openpyxl
# 从 openpyxl.styles 导入 Font 函数
>>> from openpyxl.styles import Font
>>> 
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 为 A1 单元格添加内容,并设置字体大小为 24
>>> sheet['A1'].value = 'Linuxprobe.com'
>>> sheet['A1'].font = Font(size = 24)

# B2 单元格添加内容,设置字体大小 24,斜体
>>> sheet.cell(row = 2, column = 2, value = "Linuxprobe.com").font = Font(size = 24, italic = True)

# C3 单元格添加内容,设置字体大小 24,粗体
>>> sheet.cell(row = 3, column = 3, value ="Linuxprobe.com").font = Font(size = 24, bold = True)

# D4 单元格添加内容,设置字体大小 24,设置字体样式
>>> sheet.cell(row = 4, column = 4, value = "Linuxprobe.com").font = Font(size = 24, name = 'Times New Roman')
>>> wb.save('/data/font_styles.xlsx')

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

绘制图表

要在 Excel 表格上绘制图表,首先要创建特定图表类(即 BarChart、LineChart 等)的图表对象。创建图表对象后,在其中插入数据,最后将该图表对象添加到工作表中。

[root@localhost data]# python3

>>> import openpyxl
# 导入图表库
>>> from openpyxl.chart import BarChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 使用循环为工作表附加内容
>>> for i in range(10):
...   sheet.append([i])
... 
# 为图表创建数据
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#创建图表实例
>>> chart = BarChart()
# 向条形图添加数据
>>> chart.add_data(values)
# 添加图表标题
>>> chart.title = "BAR-CHART"
# 添加 X 坐标标题
>>> chart.x_axis.title = "X_AXIS"
# 添加 Y 坐标标题
>>> chart.y_axis.title = "Y_AXIS"
>>> 
# 工作表的 E2 单元格添加图表
>>> sheet.add_chart(chart, 'E2')
>>> 
>>> wb.save("/data/charts.xlsx")

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据
下面实例,是添加折线图:

[root@localhost data]# python3

>>> import openpyxl
# 导入图表库
>>> from openpyxl.chart import LineChart, Reference
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> 
# 使用循环为工作表附加内容
>>> for i in range(10):
...   sheet.append([i])
... 
# 为图表创建数据
>>> values = Reference(sheet, min_col=1,min_row=1,max_col=1,max_row=10)
#创建图表实例
>>> chart = LineChart()
# 向折现图添加数据
>>> chart.add_data(values)
# 添加图表标题
>>> chart.title = "LINE-CHART"
# 添加 X 坐标标题
>>> chart.x_axis.title = "X_AXIS"
# 添加 Y 坐标标题
>>> chart.y_axis.title = "Y_AXIS"
>>> 
# 工作表的 E2 单元格添加图表
>>> sheet.add_chart(chart, 'E2')
>>> 
>>> wb.save("/data/charts.xlsx")

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

添加图片

为了在我们的工作表中导入图像,我们将使用 openpyxl.drawing.image.Image。该方法是在 pillow 库中找到的 PIL.Image 方法。因此,必须安装 python3-pillow库才能使用此方法。

[root@localhost data]# yum -y install python3-pillow
[root@localhost data]# python3

>>> import openpyxl
# 导入 Image 函数
>>> from openpyxl.drawing.image import Image
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>>
# 向工作表第一行添加内容
>>> sheet.append(["abc",10,"def",20])
# 添加图片
>>> img = Image("/data/banner1.jpg")
>>> 
>>> sheet.add_image(img, 'A2')
>>> 
>>> wb.save("/data/images.xlsx")

使用 openpyxl 处理表格数据
使用 openpyxl 处理表格数据

总结

本文讲述了如何使用 Python 和 openpyxl 库读取和写入 Excel 表格数据、计算、单元格设置、绘制图表和添加突变等操作。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计6632字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8042272
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
欧洲无限速云盘免费10GB永久存储 + WebDAV部署+图床搭建,多平台联动一步到位!

欧洲无限速云盘免费10GB永久存储 + WebDAV部署+图床搭建,多平台联动一步到位!

欧洲无限速云盘免费 10GB 永久存储 + WebDAV 部署 + 图床搭建,多平台联动一步到位! 大家好,我...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...