Python处理表格 python处理表格真的很好用吗_bc

日常办公都离不开excel的使用,就像我们经常看到的广告一样,会python的一会就吧excel工作做完了,不会的还需要加班完成...,那么到底python能否实现高效excel处理呢?下面我们就一起来看下openpyxl库如何来处理excel文档。

python处理excel有哪些类库

xlrd、xlwt、openpyxl都是python常用的处理excel类库

xlrd 是只能读取excel文档内容

xlwt 是只能将内容数据写入excel文档

xlrd和xlwt这两个库结合起来功能也很丰富,不过今天我们一起来了解下openpyxl类库,openpyxl库既可以读excel文档,也可以将数据写入excel文档,并且还可以操作sheet表格,生成图表(比如柱状图、饼图)等。

搭建openpyxl类库环境

首先我们来安装openpyxl类库,使用如下命令:

pip install openpyxl

如果下载比较慢可以使用python的国内镜像

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

我这里指向了国内的阿里云python镜像,关于pip 使用镜像的命令可以参考我的这篇文章:python pip 常用命令

了解下excel的基本概念

虽然我们经常使用excel,但我知道还是有很多人对excel的基本概念不是很了解,功能可能经常使用,我们在对excel下手之前先定义好了基本概念,等下面提到的时候知道说的是什么

工作薄 (workbook),我们通俗说的一个excel文档

工作表 (sheet),一个工作薄最少包含一个工作表,可以有多个,我们通常看到excel下面显示的sheet1、sheet2、sheet3等,当然我们也可以对工作表重命名

列 (column),也就是工作表中竖着的列,从A开始记录位置

行 (row),工作表中横向的行,从1开始记录位置

单元格 (cell),工作表中一个一个的表格,并且位置由列和行的位置标号记录(比如:A1,C5)

我们上面总结了excel的工作薄、工作表、列、行、单元格等信息,记住他们的英文对我们接下来的使用很有帮助(workbook、sheeet、column、row、cell)

openpyxl简单操作excel的三个基本步骤

加载workbook到内存

打开要处理的sheet

读写单元格cell

现在我们有“学生表.xlsx"的工作薄,如下图:

Python处理表格 python处理表格真的很好用吗_bc_02

下面我们开始使用python代码来处理excel文档

1、首先从openpyxl模块中导入load_workbook函数

load_workboot函数用来加载工作薄

from openpyxl import load_workbook

2、使用load_workbook函数加载工作薄

#相对路径,与当前程序在同一目录下

wb = load_workbook("学生表.xlsx")

#绝对路径,可以指向计算机上任何能访问到的位置

wb = load_workbook("D:\h3blog\学生表.xlsx")

3、打开指定的sheet表格

加载完excel文档后,我们可以打开指定的sheet名称的表格

#打开工作表有两种方式:

#第一种:通过工作表名称打开工作表

sheet=wb["sheet1"]

#第二种:获取活跃的工作表,也就是默认打开显示的表格

sheet=wb.active #['sheet1']

顺便我们来了解下工作表的其他操作:

#获取所有的工作表

wb.sheetnames #['sheet1']

#修改工作表名称

sheet.title="students"

#获取工作表名称

sheet.title #students

4、单元格常用操作

加载工作簿,打开工作表后就可以操作单元格了,以下是对单元格操作的介绍:

获取单元格(指定行,指定列)

sheet.cell(2,3) #

sheet["C2"] #

如果要获取单元格的值,使用value属性:

#方式一

sheet.cell(2,3).value #60

#方式二

sheet["C2"].value #60

往单元格(指定行,指定列)中写入值

#方式一

sheet.cell(2,4).value="及格"

#方式二

sheet["D3"]="及格"

#方式三

sheet.cell(4,4,"良好")

#保存工作簿

wb.save("学生表.xlsx")

Python处理表格 python处理表格真的很好用吗_python_03

获取工作表的最大行和最大列

#获取最大行:

sheet.max_row #8

#获取最大列:

sheet.max_column #4

获取多个单元格

方法一:切片方法,结果为一个元组

#获取A1到A3的单元格

cell1=sheet['A1:A3']

#获取第一行和第二行的单元格

cell2=sheet[1:2]

#获取A列到C列的单元格

cell3=sheet['A:C']

方法二:iter_rows 和 iter_cols 方法,此方法得到的是一个可迭代序列

#获取行数1-2且列数1-4的单元格,逐行读取

cell4=sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=4)

for cell in cell4:

print(cell)

# 上面获取的是单元格,如果想得到单元格的值,只需加个参数

cell4=sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=4,values_only=True)

#获取列数1-4且行数1-2的单元格,逐列读取

cell5=sheet.iter_cols(min_col=1, max_col=4,min_row=1, max_row=2)

for cell in cell5:

print(cell)

#同样,想获取单元格的值,加参数

cell5=sheet.iter_cols(min_col=1, max_col=4,min_row=1, max_row=2,values_only=True)

5、插入/删除行、列

#插入行

sheet.insert_rows(idx=数字编号,amount=要插入行数)

#删除行

sheet.delete_rows(idx=数字编号,amount=要插入行数)

#从第二行开始插入三行

sheet.insert_rows(idx=2,amount=3

Python处理表格 python处理表格真的很好用吗_Python处理表格_04

#第2行开始删除3行

sheet.delete_rows(idx=2,amount=3)

#插入列

sheet.insert_cols(idx=数字编号,amount=要插入列数)

#删除列

sheet.delete_cols(idx=数字编号,amount=要插入列数)

生成折线图和柱状图

现有Excel文档“销售数据.xlsx",表中数据内容如下:

Python处理表格 python处理表格真的很好用吗_bc_05

现在我们在excel中生成折线图,结果如下:

Python处理表格 python处理表格真的很好用吗_python处理表格很厉害么_06

我们还可以生成柱状图:

Python处理表格 python处理表格真的很好用吗_Python处理表格_07

代码如下:

from openpyxl import load_workbook

# 生成折线图

from openpyxl.chart import LineChart,Reference

wb=load_workbook("销售数据.xlsx")

sheet=wb.active

chart=LineChart()

# 图的标题

chart.title="手机销售数据统计"

# y轴标题

chart.y_axis.title="销量(单位:万台)"

# x轴标题

chart.x_axis.title="季度"

# 数据来源

data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)

# 设定X轴项目名称,项目名称来自第一行的第二列至第五行

categories=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)

# 给折线图添加数据,数据源中有系列名称,系列名称来自行,第一行为系列名称

chart.add_data(data,from_rows=True,titles_from_data=True)

chart.set_categories(categories)

sheet.add_chart(chart,"B6")

wb.save("销售数据.xlsx")

from openpyxl import load_workbook

#生成柱状图

from openpyxl.chart import BarChart,Reference

wb=load_workbook("销售数据.xlsx")

sheet=wb.active

bc=BarChart()

# 图的标题

bc.title="手机销售数据统计"

# y轴标题

bc.y_axis.title="销量(单位:万台)"

# x轴标题

bc.x_axis.title="季度"

# 数据来源

bc_data=Reference(worksheet=sheet,min_row=2,max_row=4,min_col=1,max_col=5)

# 设定X轴项目名称,项目名称来自第一行的第二列至第五行

bc_cat=Reference(sheet,min_col=2,min_row=1,max_col=5,max_row=1)

# 给柱状图添加数据,数据源中有系列名称,系列名称来自行,第一行为系列名称

bc.add_data(bc_data,from_rows=True,titles_from_data=True)

bc.set_categories(bc_cat)

sheet.add_chart(bc,"B6")

wb.save("销售数据.xlsx")

关于更多openpyxl库的用法大家可以百度,或者去官方文档中学习:

https://openpyxl.readthedocs.io/en/stable/