zoukankan      html  css  js  c++  java
  • Python操作Excel神器-openpyxl之读取

    #openpyxl只能处理xlsx格式的excel文件
    import openpyxl
    
    #打开已存在的excel,返回文件对象
    #如果excel文件不存在,那么会FileNotFoundError
    wb = openpyxl.load_workbook('西柚.xlsx')    
    
    # 打印表单信息,返回一个表单列表
    print(f'这是一个表单列表:{wb.sheetnames},类型为:{type(wb.sheetnames)}')
    print(f'也可以用表单对象.title()获取表单的名字:{wb.sheetnames[0].title()}')
    for index, sheet in enumerate(wb.sheetnames, start=1):
        print(f'这是第{index}个表单, 表单名为:{sheet}')
    
    # 新建表单
    print(f'这是新建表单前的表单列表{wb.sheetnames}')
    newSheet = wb.create_sheet('newSheet', 1) #index为指定新建表单的位置
    print(f'这是新建表单后的表单列表{wb.sheetnames}')
    
    # 根据表单名字获取表单对象
    # 官方推荐使用方式二
    # 1.方式一
    # Sheet1 = wb.get_sheet_by_name('Sheet1')
    # 2.方式二
    Sheet2 = wb['Sheet2']
    
    # 获取当前活跃的表单对象
    active_sheet = wb.active
    print(f'当前活跃的表单为:{active_sheet}')
    
    # 获取当前表单中最大行数以及最大列数
    print(f'表单最大行数为:{active_sheet.max_row}')
    print(f'表单最大列数为:{active_sheet.max_column}')
    
    
    # 获取单元格对象及其相关属性
    # 获取单元格对象方式一 / 单元格对象 = 表单对象['单元格坐标']
    cell1 = active_sheet['A1']
    # 获取单元格对象方式二 / 单元格对象 = 表单对象.cell(row = x, column = j)
    cell2 = active_sheet.cell(row=2, column=1)
    
    print(f'使用方式一获取的单元格对象为:{cell1}')
    print(f'使用方式二获取的单元格对象为:{cell2}')
    print(f'当前获取的单元格内容为:{cell1.value}')  # 单元格内容 = 单元格对象.value
    print(f'当前获取的单元格行数为:{cell1.row}')  # 单元格行数 = 单元格对象.row
    print(f'当前获取的单元格列数为:{cell1.column}')  # 单元格列数 = 单元格对象.column
    print(f'当前获取的单元格坐标为:{cell1.coordinate}')  # 单元格坐标 = 单元格对象.coordinate
    
    # 获取列对象
    colC = active_sheet['C']
    print(f'获取C列的列对象:{colC},返回的类型为:{type(colC)}')
    print(f'通过列对象获取C列的某一个单元格对象:{colC[2]}')  # 注意,这里的2其实是元祖的下标索引为2的值,所以取得是C列第三行单元格对象。
    print(f'获取范围列对象:{active_sheet["B:C"]}') #返回元祖,元祖每个元素均为元祖,值为列对象
    print(f'获取当前表单所有列对象:{tuple(active_sheet.columns)}') #获取当前表单所有的列对象。元祖嵌套元祖
    
    # for cols in active_sheet.iter_cols(min_col=1,min_row=1,max_col=10,max_row=10,values_only=True):
    #     #values_only参数默认是False,那么此时会的单的是单元格的对象,如果设置为True,那么获得的是单元格的值。即cell.value
    #     #如果遍历的单元格无数据的话,则会返回None
    #     #每次遍历会返回一个元祖
    #     print(cols)
    #     for i in cols:
    #         print(i)
    
    # 获取行对象
    row1 = active_sheet[1]
    print(f'获取第一行的行对象:{row1},返回的类型为:{type(row1)}')  # 同上,返回元祖
    print(f'通过行对象获取第一行的某一个单元格对象:{row1[2]}')  # 注意,这里的2其实是元祖的下标索引为2的值,所以取得是第三列第一行的单元格对象。
    print(f'获取范围行对象:{active_sheet[2:4]}') #返回元祖,元祖每个元素均为元祖,值为行对象
    print(f'获取当前表单所有行对象:{tuple(active_sheet.rows)}') #获取当前表单所有的行对象。元祖嵌套元祖
    
    # for rows in active_sheet.iter_rows(min_col=1,min_row=1,max_col=10,max_row=10,values_only=True):
    #     #values_only参数默认是False,那么此时会的单的是单元格的对象,如果设置为True,那么获得的是单元格的值。即cell.value
    #     #如果遍历的单元格无数据的话,则会返回None
    #     #每次遍历会返回一个元祖
    #     print(rows)
    #     for i in rows:
    #         print(i)
    
    #获取指定范围坐标的单元格对象
    cell_range = active_sheet['A1:B3']  # 这里的坐标可以理解为平行四边形的左上角坐标:右下角坐标,返回得平行四边形内的所有行对象
    print(cell_range)
    for row_Obj in cell_range:
        print(f'现在打印的行对象为:{row_Obj}')
        for cellObj in row_Obj:
            print(f'这是该单元格的坐标:{cellObj.coordinate},	这是该单元格的内容:{cellObj.value}')
    
    
    #拓展:当列数非常多时,使用字母去对应列数就比较困难,比如说第900列,他所对应的列字母为‘AAH’,那么这时需要一个小操作。
    from openpyxl.utils import column_index_from_string,get_column_letter
    print(get_column_letter(900),column_index_from_string('AHQ'))
    
    # 在读取数据时,除了excel中的整型、小数、True、False,分别读取出来为int、float、boolean外,
    # 其他的数据都为字符串类型
    
  • 相关阅读:
    个人知识管理系统Version1.0开发记录(09)
    个人知识管理系统Version1.0开发记录(08)
    个人知识管理系统Version1.0开发记录(07)
    个人知识管理系统Version1.0开发记录(06)
    个人知识管理系统Version1.0开发记录(05)
    个人知识管理系统Version1.0开发记录(04)
    登录流程
    小程序开发工具黑屏
    免费BOOTSTARP后台模板
    JQUERY重写
  • 原文地址:https://www.cnblogs.com/x1you/p/12725775.html
Copyright © 2011-2022 走看看