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:]))#列相加
浙公网安备 33010602011771号