三大模块,我们将通过简单的实例来介绍他们的用法: 1、Workbook操作工作簿的模块(工作簿,一个excel文件包含多个sheet。) 先创建一个对象,新建一个工作簿: 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_workbookwb = load_workbook('test1.xlsx')ws.title='第一个表'wb.save('test1.xlsx') 运行结果: 如果我们需要新建表,可以使用下面的命令: from openpyxl import load_workbookwb = load_workbook('test1.xlsx')wb.create_sheet('最后的位置')wb.create_sheet('倒数第二的位置',-1)wb.create_sheet('最前面的位置',0)wb.save('test1.xlsx')
如果要删除表,使用下面的命令: from openpyxl import load_workbookwb = load_workbook('test1.xlsx')del wb['倒数第二的位置']wb.save('test1.xlsx') 结果如下: 可以看到,刚才创建的'倒数第二的位置'这个表被删除了!我们可以通过下面的命令来指定工作表: wb.sheetnames:# 获取文档所有工作表名称,返回一个列表 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') 运行结果如下: 复制工作表: from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws=wb.activewb.copy_worksheet(ws)wb.save('test1.xlsx')
可以通过下面命令获得工作表的信息: 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 我们来验证一下,执行前已经写入一些数据: 果然是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 我们来看看: 获取单元格的属性有哪些命令: 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') 运行结果如下: 在最后一行追加数据的方法: from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#在最后一行追加数据ws=wb['第一个表']ws.append([1, 2, 3])wb.save('test1.xlsx') 运行结果: 读取行和列的数据,准备数据如下 读取代码: 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行
更多复杂的数据处理可能还会用到NumPy或者Pandas等第三方库。 写程序可能比不上熟练使用VBA来得快,但对于长期重复的操作,Python的优势是显而易见的。 |
|