天天看点

自动化操作Excel利器:Python第三方库Openpyxl指南)

作者:RPA自动化

带你走进 @ 机器人时代

Discover 点击上面蓝色文字,关注我们

自动化操作Excel利器:Python第三方库Openpyxl指南)

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利器:Python第三方库Openpyxl指南)

在相同的目录下生成了一个新的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')           

运行结果:

自动化操作Excel利器:Python第三方库Openpyxl指南)

如果我们需要新建表,可以使用下面的命令:

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')           

最后一定要记得保存,参数里面要写上为文件名:

自动化操作Excel利器:Python第三方库Openpyxl指南)

如果要删除表,使用下面的命令:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
del wb['倒数第二的位置']
wb.save('test1.xlsx')           

结果如下:

自动化操作Excel利器:Python第三方库Openpyxl指南)

可以看到,刚才创建的'倒数第二的位置'这个表被删除了!我们可以通过下面的命令来指定工作表:

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', 
  '最后一个表', '最后的位置']
<Worksheet "Sheet2">
<Worksheet "最后的位置">           

如果想修改当前表标签的颜色:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#修改当前工作表标签颜色(红色)
ws=wb.active
ws.sheet_properties.tabColor = 'ff0000'
wb.save('test1.xlsx')           

运行结果如下:

自动化操作Excel利器:Python第三方库Openpyxl指南)

复制工作表:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
wb.copy_worksheet(ws)
wb.save('test1.xlsx')           

运行结果如下:

自动化操作Excel利器:Python第三方库Openpyxl指南)

可以通过下面命令获得工作表的信息:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
# 获取文档的字符集编码
print(wb.encoding, end='\n\n')
# 获取文档的元数据如标题,创建者,创建日期等
print(wb.properties)
wb.save('test1.xlsx')
结果如下:
utf-8

<openpyxl.packaging.core.DocumentProperties object>
Parameters:
creator='openpyxl', title=None, 
description=None, subject=None, 
identifier=None, ........           

如何获取某一个表中的最大行和列呢?

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           

我们来验证一下,执行前已经写入一些数据:

自动化操作Excel利器:Python第三方库Openpyxl指南)

果然是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           

我们来看看:

自动化操作Excel利器:Python第三方库Openpyxl指南)

获取单元格的属性有哪些命令:

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')           

运行结果如下:

自动化操作Excel利器:Python第三方库Openpyxl指南)

在最后一行追加数据的方法:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#在最后一行追加数据
ws=wb['第一个表']
ws.append([1, 2, 3])
wb.save('test1.xlsx')           

运行结果:

自动化操作Excel利器:Python第三方库Openpyxl指南)

读取行和列的数据,准备数据如下

自动化操作Excel利器:Python第三方库Openpyxl指南)

读取代码:

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行           

运行结果如下:

自动化操作Excel利器:Python第三方库Openpyxl指南)

以上是Openpyxl的常规操作,如果需要设置样式,插入公式等更多的应用,需要导入Openpyxl的其他模块;

更多复杂的数据处理可能还会用到NumPy或者Pandas等第三方库。

写程序可能比不上熟练使用VBA来得快,但对于长期重复的操作,Python的优势是显而易见的。

坚持学习,每天都能进步一点点!

往期回顾:

  • 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
  • RPA技术在旅行社销售业务中如何凤凰涅槃??
  • 【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!

本文引用和摘录相关内容,请联系侵删。

- END -

最后,文章有帮助到你的话【点赞在看】

激励我们分享更多的干货!