Python自动化办公 #001 openpyxl

Python在处理表格数据时,可以利用功能强大的openpyxl库


1. openpyxl 介绍

  • 安装:pip install openpyxl

  • openpyxl是一个开源项目,它是一个用于读取/写入Excel 2010文档(如xlsx 、xlsm 、xltx 、xltm文件 )的Python库

  • 如果要处理更早格式的Excel文档(xls),需要用到其它库(如:xlrd、xlwt等),这是openpyxl比较其他模块的不足之处。

  • python中与excel操作相关的模块:

    xlrd:从excel中读取数据,支持xls、xlsx格式

    xlwt:对excel进行修改操作,但不支持对xlsx格式的修改

    openpyxl:主要针对xlsx格式的excel进行读取和编辑



2. openpyxl 基本概念

  • WorkBook:工作簿对象

  • Sheet:表单对象

  • Cell:表格对象



3. openpyxl 操作EXCEL


3.1 打开 / 创建工作薄

  import openpyxl

  # ======================  workbook操作  ================================
  # 实例化对象
  wb = openpyxl.Workbook()
  # 保存工作簿
  wb.save("test.xlsx")
  # 打开已有的工作簿,通过更改后缀的文件打开会报错
  wb = openpyxl.load_workbook('Book1.xlsx')


  # ======================  worksheet操作  ================================
  # 新建sheet表,可通过index控制创建的表的位置
  wb.create_sheet(index=2, title="sheet3")

  # 打印sheet
  print(wb.sheetnames)
  # 根据表名删除sheet表
  wb.remove(wb["sheet3"])
  print(wb.sheetnames)

3.2 workbook的属性

import openpyxl

# 1.读取文件
wb = openpyxl.load_workbook('Book1.xlsx')

# 2.workbook对象的属性
print(wb)
print(wb.sheetnames)    # sheetnames:获取工作簿中所有的表(列表)
print(wb.active)        # active:激活当前的worksheet
print(wb.worksheets)    # worksheets:以列表的形式返回所有的Worksheet(表格)
print(wb.encoding)      # encoding:获取文档的字符集编码
print(wb.properties)    # properties:获取文档的元数据,如标题,创建者,创建日期等

'''
=======================================================================
1.一个Excel表格由 workbook(工作簿),worksheet(工作表 ),cell(单元格)组成
2.openpyxl库和xlwt库是不一样的,xlwt库创建的表格用openpyxl库是打不开的
=======================================================================
'''

3.3 worksheet属性

import openpyxl

wb = openpyxl.load_workbook("Book1.xlsx")
# 选择要操作的工作表, 返回工作表对象
sheet = wb["表一"]

print(sheet.title)          # 工作表的名称
sheet.title = 'sheet1'      # 修改表的名称
print(sheet.title)

print(sheet.max_column)     # 工作表的最大列
print(sheet.max_row)        # 工作表的最大行
print(sheet.min_column)     # 工作表的最小列
print(sheet.min_row)        # 工作表的最小行
print(sheet.rows)           # 获取行生成器
print(sheet.columns)        # 获取列生成器
print(sheet.values)         # 获取值生成器

3.4 遍历单元格

  • 单元格内数据:

  • 程序:

    import openpyxl
    
    wb = openpyxl.load_workbook("Book1.xlsx")
    sheet = wb["表一"]
    
    # 1.获取C列的所有数据
    column_C = []
    for i in sheet["C"]:
        print(i)
        column_C.append(i.value)
    print(column_C)
    
    
    # 2.获取第1行的所有数据
    row_1 = []
    for i in sheet[1]:
        print(i)
        row_1.append(i.value)
    print(row_1)
    
    
    # 3.遍历所有单元格
    ## rows为所有行,row为当前行
    for row in sheet.rows:
        for cell in row:
            print(cell.value, end=' ')
    
  • 输出:

    <Cell '表一'.C1>
    <Cell '表一'.C2>
    ['性别', '男']
    <Cell '表一'.A1>
    <Cell '表一'.B1>
    <Cell '表一'.C1>
    ['姓名', '年龄', '性别']
    姓名 年龄 性别 张三 20 男 
    Process finished with exit code 0
    

3.5 写入数据

  • 程序:

    import openpyxl
    
    # ==================== 1. 创建工作簿,工作表  ==============
    # 实例化workbook对象
    wb = openpyxl.Workbook()
    # 创建表,索引从1开始
    ws = wb.create_sheet(index=2, title="sheet_creat")
    
    # ============================ 2.激活表  =========================
    # 一:通过索引值激活表,即选中表
    wb.active = 2
    # 二:通过表名激活表
    sheet = wb["sheet_creat"]
    
    # ========================= 3.写入数据到单元格  =========================
    # 两种方法
    # 一:指定单元格编号["A6"]
    ws["A6"] = "hello"
    # 二:根据行列索引
    ws.cell(row=1, column=2).value = "你好"
    
    sheet["B5"] = "333"
    sheet.cell(row=2, column=2).value = "222"
    
    
    # ============================= 4.保存表  =============================
    wb.save("Book2.xlsx")
    
  • 结果:

posted @ 2023-06-28 22:51  枫_Null  阅读(107)  评论(0)    收藏  举报