• Python openpyxl【包】


    介绍

    Excel是我们日常工作中经常用到的办公软件,在处理数据和表格方面有着优异的性能,那么能不能用python来操作Excel呢?

    答案是肯定的,openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。

    安装

    pip install openpyxl

    Workbook(工作簿)

    import openpyxl
    
    # 创建工作簿
    wb = openpyxl.Workbook()
    
    # 打开工作簿
    wb = openpyxl.open("demo.xlsx")
    wb = openpyxl.load_workbook("demo.xlsx")
    
    # 保存工作簿
    wb.save("demo.xlsx")

    Worksheet(工作表)

    import openpyxl
    
    # 创建工作簿
    wb = openpyxl.Workbook()
    
    # 创建工作表
    wb.create_sheet("sheet2")
    wb.create_sheet("sheet1",1)
    
    # 获取所有表
    obj_sheet = wb.worksheets # 返回列表,列表中为对象
    str_sheet = wb.sheetnames # 返回列表,列表中为字符串
    
    # 切换工作表
    sheet = wb.active # 默认获取第一张表
    sheet1 = wb.get_sheet_by_name("sheet1")
    sheet2 = wb.worksheets[2]
    
    # 删除工作表
    wb.remove(wb.worksheets[1])

    操作表内容

    import openpyxl
    
    """ 工作簿与工作表 """
    # 创建工作簿
    wb = openpyxl.Workbook()
    # 切换工作表
    ws = wb.worksheets[0]
    wb.create_sheet("sheet1")
    ws1 = wb.worksheets[1]
    
    
    
    """ 添加数据 """
    # 单键添加
    ws["A1"] = "姓名"
    ws["B1"] = "年龄"
    
    # 多值添加
    ws.append(["kidd", 18])
    
    # 索引添加
    ws.cell(3,1,"sun")
    ws.cell(3,2,18)
    
    
    """ 获取数据 """ # 单个获取 print("单个获取".center(50,"-")) cell_name = ws["A1"] cell_age = ws.cell(1,2) print(cell_name.value, cell_age.value) # 返回cell对象 .value输出该单元格内容 # 区间获取 print("区间获取".center(50,"-")) cell_a1_b1 = ws["A1:B1"] # 类似于切片 for cells in cell_a1_b1: # cell_a1_b1:<Cell 'Sheet'.A1> <Cell 'Sheet'.B1> for cell in cells: # cells:(<Cell 'Sheet'.A1>, <Cell 'Sheet'.B1>) print(cell.value) # 获取指定索引 print("指定索引".center(50,"-")) for row in range(1,4): for column in range(1,3): cell = ws.cell(row, column) print(cell.value) # 将每一行组成一个元祖,将该元祖放入生成器中 print("rows获取".center(50,"-")) for row in ws.rows: # rows:生成器对象 --> 元祖 --> cell对象 print(row[0].value, row[1].value) # 将每一列组成一个元祖,将该元祖放入生成器中 print("columns获取".center(50,"-")) for column in ws.columns: # columns:生成器对象 --> 元祖 --> cell对象 for cell in column: print(cell.value) """ 其它 """ # 添加公式 ws["C1"] = "总年龄" ws["C2"] = "=sum(B2:B%s)" %ws.max_row # 删除行列 ws.delete_rows(99) ws.delete_cols(99) # 没有该列,不会报错,行也一样 # 获取最大行,最大列 max_row = ws.max_row max_column = ws.max_column print(max_row, max_column) # 3 2 # 改变sheet底部的颜色 ws.sheet_properties.tabColor = "7fff00" ws1.sheet_properties.tabColor = "ff0000" # 根据数字得到字母,根据字母得到数字 from openpyxl.utils import get_column_letter, column_index_from_string print(get_column_letter(2)) # B 根据列的数字返回字母 print(column_index_from_string('D')) # 4 根据字母返回列的数字 wb.save("demo.xlsx")

    设置单元格风格

    需要导入的类

    from openpyxl.styles import Font, colors, Alignment

    字体

    下面的代码指定了等线24号,加粗斜体,字体颜色红色。直接使用cell的font属性,将Font对象赋值给它。

    bold_itatic_24_font = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)
     
    sheet['A1'].font = bold_itatic_24_font

    对齐方式

    也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数。

    # 设置B1中的数据垂直居中和水平居中
    sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

    设置行高和列宽

    # 第2行行高
    sheet.row_dimensions[2].height = 40
    # C列列宽
    sheet.column_dimensions['C'].width = 30

    合并和拆分单元格

    • 所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
    • 相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。
    # 合并单元格, 往左上角写入数据即可
    sheet.merge_cells('B1:G1') # 合并一行中的几个单元格
    sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格
    • 合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
    • 如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
    • 以下是拆分单元格的代码。拆分后,值回到A1位置。
    sheet.unmerge_cells('A1:C3')
  • 相关阅读:
    ADB命令无法导出文件到物理机上处理办法
    mysql 分页offset过大性能问题解决思路
    0.通用编程基础
    win10去除快捷方式小箭头
    Java经典编程题
    win10家庭版打开组策略
    js常用事件列表
    计算器 输入式子计算结果 (字符串、抛异常)
    题库
    MyEclipse自动补全设置
  • 原文地址:https://www.cnblogs.com/py-peng/p/13232923.html
Copyright © 2020-2023  润新知