• python处理Excel基础


    python处理Excel基础

    1、openpyxl简介

    (1)openpyxl简介

    openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。https://openpyxl.readthedocs.io/en/stable/

    (2)安装openpyxl模块

    openpyxl是一个开源项目,这里使用如下命令安装openpyxl模块

    pip3 install openpyxl

     

    2、Python打开及获取Excel表格内容

    (1)Excel表格基本术语

    列column;行row;单元格cell;表sheet    

     (2)打开Excel表格并获取表格名称

    # 打开Excel表格并获取表格名称
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    print(workbook.sheetnames)
    sheet_x = workbook['xue']      #通过sheet名称获取指定表格
    print(sheet_x.dimensions)      #获取表的尺寸大小

    (3)当EXCEL表里只有一个sheet表时,获取一个单元格内容

    # 当表中只有一个sheet时,读取某单元格的数据
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    cell = sheet['B2'] #指定单元格
    print(cell.value,cell.row,cell.column,cell.coordinate)
    cell = sheet.cell(row=2,column=2) #通过行号和列号来指定单元格
    print(cell.value,cell.coordinate)

     

    (3)当EXCEL表里只有一个sheet表时,获取一系列格子

    # 当表中只有一个sheet时,获取一系列格子
    from openpyxl import load_workbook

    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    cells1 = sheet['A1:B2']
    print(cells1)
    cells2 = sheet['A']
    print(cells2)
    print(sheet['1:2'])

    # 当表中只有一个sheet时,获取一系列格子
    from openpyxl import load_workbook
    
    for row in sheet.iter_rows(min_row=5,max_row=6,min_col=5,max_col=6):
        print(row)
        for cell in row:
            print(cell)
    
    for col in sheet.iter_cols(min_row=5,max_row=6,min_col=5,max_col=6):
        print(col)
        for cell in col:
            print(cell)

    (4)当EXCEL表里只有一个sheet表时,获取一系列格子

    # 当表中只有一个sheet时,迭代获取所有行、列
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    for row in sheet.rows:
        print(row)
    for col in sheet.columns:
        print(col)

    3、Python向Excel表格中写 

     (1)向某个单元格写入并保存

    # 当表中只有一个sheet时,向某个单元格写入并保存
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet['a2']= '001'
    workbook.save('students.xlsx')
    cell = sheet['A6']
    cell.value = '005'
    workbook.save('students.xlsx')

     

    (2)列表数据插入一行

    # 插入一行数据
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    data = [
        ['010','10','王甲'],
        ['011','11','王乙']
    ]
    for row in data:
        sheet.append(row)
    workbook.save('students.xlsx')

      

    (3)插入公式

    # 插入公式
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet['F18'] = '=AVERAGE(F2:F17)'
    workbook.save('students.xlsx')

     

    (4)插入一列(多列)

    # 插入一列
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet.insert_cols(idx=2,amount=4)       #在第2列之前插入空列,数量4
    workbook.save('students.xlsx')

     

    (5)插入一行(多行)

    # 插入一行(多行)
    from openpyxl import load_workbook
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet.insert_rows(idx=4,amount=4)       #在第4列之前插入空列,数量4
    workbook.save('students.xlsx')

     (6)删除列,行

    # 删除列、行
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet.delete_cols(idx=4,amount=2)       #在第4列之前删除列,数量2
    workbook.save('students.xlsx')
    
    sheet.delete_rows(idx=6,amount=2)       #在第6列之前删除行,数量2
    workbook.save('students.xlsx')

     (7)移动格子

    # 移动格子
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet.move_range("C2:D4",rows=2,cols=-2)       #指定移动格子的范围,移动方向(下、右为正)
    workbook.save('students.xlsx')

     (8)创建新的sheet,删除sheet

    # 创建新的sheet
    from openpyxl import load_workbook

    workbook = load_workbook('students.xlsx')
    print(workbook.sheetnames)
    workbook.create_sheet('表格2')
    print(workbook.sheetnames)
    workbook.save('students.xlsx')

    sheet_sc = workbook['表格2']
    workbook.remove(sheet_sc)
    workbook.save('students.xlsx')
    print(workbook.sheetnames)

     (9)修改sheet名称,创建新的Excel表格文件

    #创建新的Excel表格文件
    
    from openpyxl import Workbook
    
    workbook = Workbook()
    sheet = workbook.active
    sheet.title = '表格1'
    workbook.save('xinbiaoge.xlsx')

    (10)冻结窗格

    #冻结窗格
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    sheet.freeze_panes = 'D6'
    workbook.save('students.xlsx')

     

     (11)添加筛选

    #添加筛选
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook['表格1']
    sheet.auto_filter.ref = sheet.dimensions      #对整个表筛选
    workbook.save('students.xlsx')

     

    4.、批量调整字体、样式

    (1)修改字体样式

    #修改字体样式
    from openpyxl.styles import Font
    from openpyxl import load_workbook
    
    workbook = load_workbook('students.xlsx')
    sheet = workbook.active
    cell = sheet['A1']
    font = Font(name='黑体 Regular', size=12, bold=True,italic=True,color='FF0000')
    cell.font = font
    workbook.save('students.xlsx')

     (2)获取字体样式

    #获取字体样式
    from openpyxl.styles import Font
    from openpyxl import load_workbook
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    cell = sheet['A2']
    font = cell.font
    print(font)
    print(font.name,font.size,font.bold,font.italic)

    (3)设置对齐样式

    #设置对齐样式
    from openpyxl .styles import Alignment
    from openpyxl import load_workbook
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    cell = sheet['A4']
    alignment = Alignment(horizontal='center',vertical='center',text_rotation='45')
    cell.alignment = alignment
    workbook.save('studs.xlsx')

     (4)设置边框样式

    #设置边框样式
    from openpyxl.styles import Side,Border
    from openpyxl import load_workbook
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    cell = sheet['A6']
    side1 = Side(style='thin',color='FF0000')
    side2 = Side(style='dotted',color='FFFF00')
    border = Border(left=side1,right=side2,top=side1,bottom=side2)
    cell.border = border
    workbook.save("studs.xlsx")

     (5)设置填充样式

    #设置填充样式
    from openpyxl.styles import PatternFill,GradientFill
    from openpyxl import load_workbook
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    cell_a6 = sheet['A6']
    pattern_fill = PatternFill(fill_type="solid",fgColor='99ccff')
    cell_a6.fill = pattern_fill
    cell_a8 = sheet['A8']
    gradient_fill = GradientFill(stop=('FFFFFF','99CCFF','000000'))
    cell_a8.fill = gradient_fill
    workbook.save('studs.xlsx')

    (6)设置行高、列宽

    #设置行高、列宽
    from openpyxl import load_workbook
    import openpyxl
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    sheet.row_dimensions[1].height = 50
    sheet.column_dimensions['A'].width = 20
    workbook.save('studs.xlsx')

     (7)合并单元格

    #合并单元格
    import openpyxl
    from openpyxl import load_workbook
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    sheet.merge_cells('A1:A2')
    sheet.merge_cells(start_row=6,start_column=6,end_row=8,end_column=8)       #只保留左上第一个格子内容
    workbook.save('studs.xlsx')

     (8)取消合并单元格

    #取消合并单元格
    from openpyxl import load_workbook
    workbook = load_workbook(('studs.xlsx'))
    sheet = workbook.active
    sheet.unmerge_cells('A1:A2')
    sheet.unmerge_cells(start_row=6,start_column=6,end_row=8,end_column=8)
    workbook.save('studs.xlsx')

     5、生成Excel内图表

     (1)插入图片

    #openpyxl插入图片
    from openpyxl import load_workbook
    from openpyxl.drawing.image import Image
    
    workbook = load_workbook('studs.xlsx')
    sheet = workbook.active
    
    img_t1 = Image('tupian1.png')
    img_t1.height = 100
    img_t1.width = 100
    
    sheet.add_image(img_t1,"A1")
    workbook.save('studs.xlsx')

    (2)图表

    https://openpyxl.readthedocs.io/en/stable/charts/introduction.html

     

  • 相关阅读:
    uvaoj 401 Palindromes
    ThinkPHP框架研究之一 基本函数 M和D的区别
    camera
    总结
    安装ecshop出错
    在MySQL数据库建立多对多的数据表关系
    北京周边骑行路线总结
    解决PowerDesigner中DBMS设置的问题(Repost)
    zendstudio 汉化
    JavaScript高级程序设计-13:事件
  • 原文地址:https://www.cnblogs.com/nfcf/p/12791344.html
Copyright © 2020-2023  润新知