• python-excel文件处理-openpyxl模块


    工作中我们会经常对excel文件进行处理,比如常见的整理数据、提交报表;你是否因为经常复制粘贴而感觉枯燥,那么你可以尝试通过python对excel文件进行处理,来加快工作效率,减少枯燥而重复的工作。。。

    我又开始一本正经的胡说八道了。。

    正文开始:

    对excel文件的操作一般有很多,我们简单的从操作上把它分为三部分:读,写,处理格式;其实你也没必要刻意去记,大致知道怎么用,用的时候对象后面跟个点。,pycharm会自动列出很多方法,根据方法名选择你想要的;或者知道大体怎么用,到时再查资料都是可以的。

    0. 准备条件,安装openpyxl;

      pip install openpyxl

    1. 读取excel文件:

    大致分五步:读文件>>>获取sheet>>>选择sheet>>>单元格定位>>>输出单元格的值

    from openpyxl import load_workbook

    #1. 读取excel文件
    wb = load_workbook('../data/excel-001.xlsx')

    #2. 获取sheet names
    sheet_names = wb.sheetnames
    # 获取sheet对象
    sheets = wb.worksheets

    #3. 选择sheet;分别基于sheet name或index
    sheet1 = wb[sheet_names[0]]
    sheet2 = sheets[1]
    sheet3 = sheets[2]

    #4. 遍历时也可以直接按照下面的格式
    for sheet in wb:
    for row in sheet.rows:
    print(row)
    #5. 定位单元格;分别基于(行,列)元组 或 excel 位置A1,B3;行列从1开始计算
    # 单个单元格
    cell1 = sheet1.cell(1,1)
    cell2 = sheet1.cell(1,2)
    cell3 = sheet3['A2']

    #6. 打印单元格的值
    print(cell1.value)
    print(cell2.value)
    print(cell3.value)

    #7. 打印单元格的属性
    print(cell1.style)
    print(cell1.font)
    print(cell1.alignment)

    #8. 一行或者一列; 行从1开始,列从A开始; 返回的sheet元组列表,可循环遍历
    cell_row1 = sheet1[1]
    cell_column1 = sheet3['A']

    for row in cell_row1:
    print(row.value)

    for column in cell_column1:
    print(column.value)

    #9. 所有行,所有列。sheet1.rows sheet1.columns;返回对象,可以遍历输出行列元组;
    # 可用索引定位某行或列中的一个,输出其。value值;行中有列,列中有行;我中有你,你中,呵,呸。。
    rows = sheet1.rows
    for row in rows:
    print(row)
    # 输出每行的第一列,等于输出第一列
    for row in rows:
    print(row[0].value)
    # 输出每一列,第一行的值
    columns = sheet1.columns
    for column in columns:
    print(column[0].value)

    point1::: 合并单元格-excel默认存在最上、最左、最左上方的一个单元格内,其他单元格值None
    定位或读取时注意

    2. 写excel文件
    大致分三步:定位并写入值、设置格式,保存;

    from openpyxl import load_workbook
    from openpyxl.styles import Alignment, Border, Side, Font

    wb = load_workbook('../data/excel-001.xlsx')
    sheet = wb.worksheets[0]

    #1. 获取单个单元格,并修改或设置值,
    cell = sheet.cell(1,1)
    cell.value = 'start'
    wb.save('../data/p1.xlsx')

    #2. 获取单个单元格,并修改或设置值,
    sheet['B2'] = '沈一愣'
    wb.save('../data/p2.xlsx')

    #3. 获取某些单元格,修改值,A2:B3,矩形,4个单元格;遍历赋值;
    cell_list = sheet["A2":"B3"]
    for row in cell_list:
    for cell in row:
    cell.value = "new_value"

    #4. 设置格式:对齐方式;
    cell = sheet.cell(1,1)
    # horizontal:水平方向:'general','left','right','center','fill','justify'等;
    # vertical:垂直方向:'top','center','bottom','justify','distributed'
    # text_rotation:旋转角度
    # wrap_text:是否自动换行:True False
    cell.alignment = Alignment(horizontal='center',vertical='center',wrap_text=True)
    wb.save('../data/p2.xlsx')

    #5. 设置边框,上下左右,对角线; 颜色参考RGD颜色对照表;
    # style: dashDot dashDotDot dashed dotted double hair medium thick thin ....
    cell = sheet.cell(1,1)
    cell.border = Border(
    top=Side(style='thin',color='FFB6C1'),
    bottom=Side(style='dashed',color='FFB6C1'),
    left=Side(style='dashed',color='FFB6C1'),
    right=Side(style='dashed',color='FFB6C1'),
    diagonal=Side(style='thin',color='FFB6C1'),
    diagonalUp=True, #左下——右上
    # diagonalDown=True #左上——右下
    )
    wb.save('../data/p2.xlsx')

    #6. 设置字体
    cell = sheet.cell(1,1)
    cell.font = Font(name="微软雅黑",size=45,color='ff0000',underline='single')
    wb.save('../data/p2.xlsx')

    #7. 宽高
    sheet.row_dimensions[1].height = 50
    sheet.column_dimensions['E'].width = 100

    #8. 合并单元格; 两种方法
    sheet.merge_cells("B2:D4")
    sheet.merge_cells(start_row=15,start_column=3,end_row=17,end_column=5)
    wb.save('../data/p2.xlsx')

    sheet.unmerge_cells("B2:D4") #取消合并
    wb.save('../data/p2.xlsx')

    #9. 写入公式
    sheet["D3"] = "=B2*C2"
    sheet["D4"] = "=SUM(B3:C3)"

    #10. 删除,从索引开始,删除多少(默认删除1)
    sheet.delete_rows(idx=1,amount=10)
    sheet.delete_cols(idx=1,amount=5)
    wb.save('../data/p2.xlsx')

    #11. 插入
    sheet.insert_rows(idx=3,amount=10)
    sheet.insert_cols(idx=1,amount=20)
    wb.save('../data/p2.xlsx')

    #12. 循环写
    cell_range = sheet['A1:C2']
    for row in cell_range:
    for cell in row:
    cell.value = "hehe"

    for row in sheet.iter_rows(min_row=5,min_col=5,max_row=7,max_col=7):
    for cell in row:
    ...

    3. 上面已经写了格式处理的部分,下面补充些sheet处理的一些内容
    from openpyxl import load_workbook

    # 读取excel文件
    wb = load_workbook('../data/excel-001.xlsx')

    # 获取sheet,打印内容
    sheet = wb.worksheets[0]
    for row in sheet:
    for cell in row:
    print(cell.value,end=',')
    print(' ')

    # 1. 修改名称
    sheet.title = "收入数据统计"
    wb.save("../data/p3.xlsx")

    # 2. 创建并设置颜色
    sheet1 = wb.create_sheet("每日计划",0)
    sheet.sheet_properties.tabColor = '1072BA'
    wb.save("../data/p4.xlsx")

    # 3. 设置默认打开的sheet
    wb.active = 0 #第一个
    wb.save("../data/p4.xlsx")

    # 4. 复制拷贝sheet
    sheet1 = wb.create_sheet("每日计划",0)
    sheet.sheet_properties.tabColor = '1072BA'

    new_sheet = wb.copy_worksheet(wb[sheet1])
    new_sheet.title = "每周计划"
    wb.save("../data/p5.xlsx")

    # 5. 删除sheet
    del wb['每周计划']
    wb.save("../data/p5.xlsx")

    ------------------------------------------------------------

    好了,先这样吧,best wishes to you...
  • 相关阅读:
    Python前戏
    Python概述
    博科Brocade 300光纤交换机配置zone教程
    pygame---制作一只会转弯的小乌龟
    UNIX故障--sun m4000服务器故障硬盘更换案例
    redhat系统升级openssh到7.5
    SAN---第二网的概念
    博科交换机常用操作命令
    博科brocade光纤交换机alias-zone的划分-->实操案例
    python常用内置函数
  • 原文地址:https://www.cnblogs.com/bernard-shen/p/14438988.html
Copyright © 2020-2023  润新知