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)
forin 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:]))#列相加

  




posted @ 2021-02-01 15:25  yongqi-911  阅读(517)  评论(0编辑  收藏  举报