openpyxl 模块的使用
openpyxl模块简介:
是用于解决Excel(WPS等均可使用)中扩展名为xlsx/xlsm/xltx/xltm的文件读写的第三方库。xls文件要使用xlwt 、wlrd两个模块。
核心概念:
Workbooks,Sheets,Cells。Workbook就是一个excel工作簿;Sheet是工作簿中的一张工作表;Cell就是表的一个单元格。
openpyxl不管读写都是:打开Workbook,定位Sheet,操作Cell。
代码示例:
from openpyxl import Workbook
#创建一个工作薄
wb=Workbook()
# 激活 worksheet
wb.active
#将新创建的EXCLE保存
wb.save(r'E:\ETL平台\陈淘淘.xlsx')
==
sheets集合下标从0开始,即第一张表为sheets[0],这里test2的第一个工作表名称:Sheet1
sht = wb.sheets[0]
示例1:
from openpyxl import Workbook local=r'E:\ETL平台\gina_test33.xlsx'# 指定文件路径 wb=Workbook('gaokexintest') # 指定文件名称 ws = wb.create_sheet('1月') # sheet名称 wb.save(local) # 保存
示例2:
# coding: utf-8 """ # @Time : 2021/2/1 15:05 # @Author : Gina Gao # @File : # @Software: PyCharm # @Descript: """ import datetime from random import choice from time import time from openpyxl import load_workbook from openpyxl.utils import get_column_letter # 设置文件 mingc addr = r'E:\ETL平台\陈淘淘11.xlsx' # 打开文件 wb = load_workbook(addr) # 创建一张新表 # ws = wb.create_sheet() # 第一行输入 ws = wb['Mysheet'] ws.append(['TIME', 'TITLE', 'A-Z']) # 输入内容(500行数据) for i in range(500): # TIME = datetime.datetime.now().strftime("%H:%M:%S") TIME=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") TITLE = str(time()) A_Z = get_column_letter(choice(range(1, 50))) ws.append([TIME, TITLE, A_Z]) # 获取最大行 row_max = ws.max_row # 获取最大列 con_max = ws.max_column # 把上面写入内容打印在控制台 for j in ws.rows: # we.rows 获取每一行数据 for n in j: print(n.value, end="\t") # n.value 获取单元格的值 print() # 保存,save(必须要写文件名(绝对地址)默认 py 同级目录下,只支持 xlsx 格式) wb.save(addr)
新建execle,或是打开excel 并进行增、减 操作 学习网址 https://www.bilibili.com/video/BV1L5411W7wD?p=3&spm_id_from=pageDriver
import openpyxl as vb local=r'E:\ETL平台\gina_test33.xlsx'# 指定文件路径 wb=vb.load_workbook(local)#工作簿 # print(wb.sheetnames)#打印sheet名称 # wb.sheetnames # ws=wb.active #当前sheet 默认名称 # wss=wb['1月'] """# 遍历sheet名称 wks=wb.worksheets for i in wks: print(i.title)#工作表的名称 """ #等价 """# 遍历sheet名称 wksn=wb.sheetnames for i in wksn: print(i) """ # wb.remove(wss)#工作簿中删除工作表 # wb.save(local) print(wb.sheetnames) #复制工作表 ws_copy=wb.copy_worksheet(wb['3月']) # ws_copy.title='8月' #复制工作表并赋予新的工作表名 wb.save(local)
新建excel .批量创建工作簿
import openpyxl as vb local=r'E:\ETL平台\gina_loop.xlsx'# 指定文件路径 wb=vb.Workbook()#新建EXECL文档 for i in range(1,11,2):#创建10个工作表,2是步长 wb.create_sheet('2021年2月'+ str(i) +'日')#i是数字,需转换为字符串 wb.save(local)
批量更改工作簿名称
# coding: utf-8 """ # @Time : 2021/2/1 17:46 # @Author : Gina Gao # @File : # @Software: PyCharm # @Descript:批量更改工作簿名称 """ import openpyxl as vb local=r'E:\ETL平台\gina_loop.xlsx'# 指定文件路径 wb=vb.load_workbook(local) sn=wb.sheetnames sn1=wb.worksheets """ for i in sn1: print(i.title) i.title='北京'+'-'+i.title wb.save(local1) """ #等价 """ for i in sn: wb[i].title='北京'+'-'+i print(i) wb.save(local) """
删除工作簿
import openpyxl as vb local=r'E:\ETL平台\gina_loop.xlsx'# 指定文件路径 wb=vb.load_workbook(local) print(wb.sheetnames) for i in wb: print(i.title.split("-")) if i.title.split("-")[0]=='上海':#split("-") 用-进行分隔,分隔后 从0开始 上海-2021年 , ['上海','2021年'] wb.remove(wb[i.title]) wb.save(local) wb.close()
批量复制模板
import openpyxl as vb local=r'E:\ETL平台\gina_area.xlsx'# 指定文件路径 local11=r'E:\ETL平台\gina_area_copy.xlsx'# 指定文件路径 wb=vb.load_workbook(local) for i in range(1,11,1): sht_copy=wb.copy_worksheet(wb['地区模板']) sht_copy.title='2021年'+'2月'+str(i)+'日' wb.save(local11)
获取值定单元格值
import openpyxl as vb local=r'E:\ETL平台\gina_area.xlsx'# 指定文件路径 local11=r'E:\ETL平台\gina_area_copy.xlsx'# 指定文件路径 wb=vb.load_workbook(local11) ws=wb['2021年2月1日'] for i in range(1,10,1): print(i,ws.cell(row=i,column=2).value) print(ws['A1'].value)
获取行、列
import openpyxl as vb local=r'E:\ETL平台\gina_area.xlsx'# 指定文件路径 local11=r'E:\ETL平台\gina_area_copy.xlsx'# 指定文件路径 wb=vb.load_workbook(local11) print(wb.sheetnames) ws=wb['地区模板'] # 范围=ws.iter_rows(min_row=1,max_row=10,min_col=1,max_col=3) #行 # for 行 in ws.rows: # for 单元格 in 行: # print(单元格.value) for 列 in ws.columns: for 单元格 in 列: print(单元格.value)
# print(list(ws.values)) # t=ws.dimensions #查看工作表区域大小 # print(ws.values) # Range=ws[t]#单元格区域 一行一行取值 #Range=ws['A:C']#单元格区域按列取值 # Range=ws['A1:G20']#单元格区域按列取值 # for row_ in Range: # for col_ in row_: # print(col_.value)
# 根据列的数字返回字母或字母返回列的数字 import openpyxl as vb 数字转字母=vb.utils.get_column_letter(5) print(数字转字母) 字母转数字=vb.utils.column_index_from_string('Z') print(字母转数字) ####等价于 from openpyxl.utils import get_column_letter,column_index_from_string # 根据列的数字返回字母 print(get_column_letter(2)) # B # 根据字母返回列的数字 print(column_index_from_string('D')) # 4
#动态读数据
#动态读数据 import openpyxl as vb 路径=r'E:\ETL平台\gina_test.xlsx' 工作簿=vb.load_workbook(路径) # print(工作簿.sheetnames) 工作表=工作簿['Sheet1'] # print(工作表.dimensions)#表范围 #A1:D6 最大行=工作表.max_row #6 最大列=工作表.max_column#4 print(最大行,最大列) A1单元格的值=工作表['A1'].value #等价于 工作表.cell(1,1).value print(A1单元格的值) A1单元格的行=工作表['A1'].row print(A1单元格的行) A1单元格的列=工作表['A1'].column print(A1单元格的列) #获取D列值 列表=[] for i in 工作表['D']: #print(i,i.value) 列表.append(i.value) #PS 想要加减乘除一定要放到列表中操作,可以用切片 print(列表)#['英语', 80, 90, 100, 110, 120] print(列表[1:])#[80, 90, 100, 110, 120] 切片从第二位开始 print(sum(列表[1:]))#列相加 列表1=[] for i in 工作表[2]:# 表头一行 工作表[1] print(i.value) 列表1.append(i.value) print(sum(列表1[1:]))#列相加