带你走进 @ 机器人时代
Discover 点击上面蓝色文字,关注我们
Python函数入门必备:神奇的Excel自动化工具Openpyxl库,网络上一直是零零碎碎的教程,今天我们为大家总结一下:
三大模块,我们将通过简单的实例来介绍他们的用法:
1、Workbook操作工作簿的模块(工作簿,一个excel文件包含多个sheet。)
2、Worksheet操作表格的模块(工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。)
3、Cell操作单元格的模块(单元格,存储数据对象)
先创建一个对象,新建一个工作簿:
from openpyxl import Workbook
#新建一个工作簿,创建一个对象
new_wb=Workbook('test2.xlsx')
new_wb.save('test2.xlsx')
运行结果:
在相同的目录下生成了一个新的excel文件,如果读取一个工作簿,我们使用如下代码:
from openpyxl import load_workbook
#打开已有的工作簿,创建一个对象
wb = load_workbook('test1.xlsx')
# 激活当前sheet表
ws = wb.active
#打印当前工作表的名字
print(ws.title)
运行结果:
Sheet1
如果要修改工作表的名字,我们运行以下代码:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws.title='第一个表'
wb.save('test1.xlsx')
运行结果:
如果我们需要新建表,可以使用下面的命令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
wb.create_sheet('最后的位置')
wb.create_sheet('倒数第二的位置',-1)
wb.create_sheet('最前面的位置',0)
wb.save('test1.xlsx')
最后一定要记得保存,参数里面要写上为文件名:
如果要删除表,使用下面的命令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
del wb['倒数第二的位置']
wb.save('test1.xlsx')
结果如下:
可以看到,刚才创建的'倒数第二的位置'这个表被删除了!我们可以通过下面的命令来指定工作表:
wb.sheetnames:# 获取文档所有工作表名称,返回一个列表
wb['Sheet1']:# 获取指定的工作表
wb.active:# 获取当前活跃的工作表
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#获取所有的工作表名称
print(wb.sheetnames)
#指定即将要操作的工作表
print(wb['Sheet2'])
#获取当前激活的工作表
print(wb.active)
wb.save('test1.xlsx')
运行结果:
['最前面的位置', '第一个表', 'Sheet2', 'Sheet3',
'最后一个表', '最后的位置']
如果想修改当前表标签的颜色:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#修改当前工作表标签颜色(红色)
ws=wb.active
ws.sheet_properties.tabColor = 'ff0000'
wb.save('test1.xlsx')
运行结果如下:
复制工作表:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
wb.copy_worksheet(ws)
wb.save('test1.xlsx')
运行结果如下:
可以通过下面命令获得工作表的信息:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
# 获取文档的字符集编码
print(wb.encoding, end='nn')
# 获取文档的元数据如标题,创建者,创建日期等
print(wb.properties)
wb.save('test1.xlsx')
结果如下:
utf-8
如何获取某一个表中的最大行和列呢?
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
y=ws.max_column
x=ws.max_row
print(x,y)
wb.save('test1.xlsx')
结果:
5 3
我们来验证一下,执行前已经写入一些数据:
果然是5行,3列的数据!如果要获取其中单元格的值:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
# 获取单元格的值
ws=wb.active
# 选择单个单元格(获取指定位置的单元格对象)
print(ws['A2'].value)
print(ws.cell(2, 1).value) # 先行后列,都是索引下标
wb.save('test1.xlsx')
结果:
6
6
我们来看看:
获取单元格的属性有哪些命令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
# 获取指定位置的单元格对象
cell = ws['B2']
print('单元格列索引',cell.col_idx)
print('单元格列索引',cell.column)
print('单元格的行索引',cell.row)
print('单元格列名',cell.column_letter)
print('单元格的坐标',cell.coordinate)
wb.save('test1.xlsx')
输出:
单元格列索引 2
单元格列索引 2
单元格的行索引 2
单元格列名 B
单元格的坐标 B2
重点来了,怎么修改单元格的值呢?
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#写入单元格
ws=wb['第一个表']
#在A2单元格写入数据
ws['A2']='写入第1个数据'
#在第1行,第2列写入数据
ws.cell(1,2).value='写入第2个数据'
wb.save('test1.xlsx')
运行结果如下:
在最后一行追加数据的方法:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#在最后一行追加数据
ws=wb['第一个表']
ws.append([1, 2, 3])
wb.save('test1.xlsx')
运行结果:
读取行和列的数据,准备数据如下
读取代码:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#读取列的方法
ws=wb['第一个表']
#读取第1列(方法1)
x=ws.max_row
s=ws[f'1:{x}']
print('第1列数据,方法1')
for i in s:
# print(type(i))
print(i[0].value)#元组需要下标
#读取第1列(方法2)
p=ws['A']
print('第1列数据,方法2')
for j in p:
print(j.value)#对象不可下标
#读取行的方法
#读取第一行(方法1)
m=ws['1']
print('第1行数据,方法1')
for q in m:
print(q.value) # 对象不可下标
#读取第一行(方法2)
n=ws['2:3']
print('第2行到第3行数据,方法2')
#获得一个二维数组,需要2次循环取出数据
for d in n:
for u in d:
print(u.value)
wb.save('test1.xlsx')
输出结果如下:
第1列数据,方法1
A1
A2
A3
第1列数据,方法2
A1
A2
A3
第1行数据,方法1
A1
B1
C1
第2行到第3行数据,方法2
A2
B2
C2
A3
B3
C3
删除行和列:
#删除行和列
ws.delete_cols(1) # 删除第一列,以此类推、n代表删除第n列
ws.delete_rows(1) # 删除第一行,以此类推、n代表删除第n行
运行结果如下:
以上是Openpyxl的常规操作,如果需要设置样式,插入公式等更多的应用,需要导入Openpyxl的其他模块;
更多复杂的数据处理可能还会用到NumPy或者Pandas等第三方库。
写程序可能比不上熟练使用VBA来得快,但对于长期重复的操作,Python的优势是显而易见的。
坚持学习,每天都能进步一点点!
往期回顾:
- 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
- RPA技术在旅行社销售业务中如何凤凰涅槃??
- 【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!
本文引用和摘录相关内容,请联系侵删。
- END -
最后,文章有帮助到你的话【点赞在看】
激励我们分享更多的干货!