• 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="	")   # 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:]))#列相加
    

      




  • 相关阅读:
    推荐一个css抖动库
    八佰
    如何将猫猫监控放在博客上
    一个springboot注解不成功的小问题
    vue整理
    springboot整理
    国外服务器:org.xml.sax.SAXParseException
    记一次tomcat运行起来了但是项目没起来的问题
    一个狗血的mysql编码错误
    js中for(var key in o ){};用法小记
  • 原文地址:https://www.cnblogs.com/gina11/p/14356831.html
Copyright © 2020-2023  润新知