分享

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

 网摘文苑 2022-11-29 发布于北京
文章图片1


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

运行结果:

文章图片2

在相同的目录下生成了一个新的excel文件,如果读取一个工作簿,我们使用如下代码:

from openpyxl import load_workbook#打开已有的工作簿,创建一个对象wb = load_workbook('test1.xlsx')#  激活当前sheet表ws = wb.active#打印当前工作表的名字print(ws.title)运行结果:Sheet1


如果要修改工作表的名字,我们运行以下代码:

from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws.title='第一个表'wb.save('test1.xlsx')

运行结果:

文章图片3

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

from openpyxl import load_workbookwb = load_workbook('test1.xlsx')wb.create_sheet('最后的位置')wb.create_sheet('倒数第二的位置',-1)wb.create_sheet('最前面的位置',0)wb.save('test1.xlsx')


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

文章图片4

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

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

结果如下:

文章图片5

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

wb.sheetnames:# 获取文档所有工作表名称,返回一个列表
wb['Sheet1']:# 获取指定的工作表
wb.active:# 获取当前活跃的工作表

from openpyxl import load_workbookwb = 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_workbookwb = load_workbook('test1.xlsx')#修改当前工作表标签颜色(红色)ws=wb.activews.sheet_properties.tabColor = 'ff0000'wb.save('test1.xlsx')

运行结果如下:

文章图片6

复制工作表:

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


运行结果如下:

文章图片7

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


from openpyxl import load_workbookwb = 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_workbookwb = load_workbook('test1.xlsx')ws=wb.activey=ws.max_columnx=ws.max_rowprint(x,y)wb.save('test1.xlsx')结果:5 3

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

文章图片8

果然是5行,3列的数据!如果要获取其中单元格的值:

from openpyxl import load_workbookwb = load_workbook('test1.xlsx')# 获取单元格的值ws=wb.active# 选择单个单元格(获取指定位置的单元格对象)print(ws['A2'].value)print(ws.cell(2, 1).value)  # 先行后列,都是索引下标wb.save('test1.xlsx')结果:66

我们来看看:

文章图片9

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

from openpyxl import load_workbookwb = 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_workbookwb = load_workbook('test1.xlsx')#写入单元格ws=wb['第一个表']#在A2单元格写入数据ws['A2']='写入第1个数据'#在第1行,第2列写入数据ws.cell(1,2).value='写入第2个数据'wb.save('test1.xlsx')

运行结果如下:

文章图片10

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


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

运行结果:

文章图片11

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

文章图片12

读取代码:


from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#读取列的方法ws=wb['第一个表']#读取第1列(方法1)x=ws.max_rows=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列数据,方法1A1A2A3第1列数据,方法2A1A2A3第1行数据,方法1A1B1C1第2行到第3行数据,方法2A2B2C2A3B3C3


删除行和列:

#删除行和列ws.delete_cols(1)  # 删除第一列,以此类推、n代表删除第n列ws.delete_rows(1)  # 删除第一行,以此类推、n代表删除第n行


运行结果如下:

文章图片13


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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多