openpyxl的学习:简单的代码实现

介绍

xls和xlsx的区别

总结:通常xlsx更好,用它就行

  • 文件结构:xls文件是以二进制格式存储的,而xlsx文件则是基于开放文档标准的xml文件格式,数据以分层结构存储
  • 文件大小:xls文件体积相对较大,而xlsx文件采用了更高效的压缩算法,文件大小通常比xls格式小得多
  • 存储容量:xlsx 格式可以存储更多的数据
  • 功能差异:xlsx 格式支持更多的函数和公式

基本概念

  • workbook: excel表格的顶层容器,包含一个或者多个工作表,通常用openpyxl.load_workbook(path)打开
  • sheet:工作表,一个excel可能有多个,很多人看excel都不注意这个,常常导致漏看
  • row,column:行和列,行号从1开始(不是0,不是0),列号从A开始

代码

获取全表内容

  • 单元格不是基本数据类型,而是<class 'openpyxl.cell.cell.Cell'>,不能直接得到value,有两种简单的方法
    • sheet.iter_rows(values_only=True)
    • cell.value
  • 空格,跳行获取到的都是None
def read_xlsx_excel(path, sheet_name):
    '''
    读取xlsx格式文件
    :param path:路径
    :param sheet_name:sheet名
    '''

    workbook = openpyxl.load_workbook(path)
    sheet = workbook[sheet_name]

    data = []
    # 遍历表格的每一行
    for row in sheet.iter_rows():
        # 初始化一行数据的列表
        temp_row = [cell.value for cell in row]
        data.append(temp_row)
    return data

获取指定行

  • 行号从1开始,输入的列表为指定列(比如:[1,2])
  • 如果想要获取每行从b到d的内容,用切片就行,temp_row[1:3]
def read_specific_rows_from_excel(path, sheet_name, row_indices: List[int]):
    '''
    从xlsx格式文件的指定工作表中读取特定行的内容
    :param path: Excel文件的路径
    :param sheet_name: 要读取的工作表名
    :param row_indices: 一个包含要读取的行索引的列表(行号从1开始)
    :return: 一个列表的列表,其中每个内部列表包含一行中的数据
    '''

    workbook = openpyxl.load_workbook(path)
    sheet = workbook[sheet_name]

    data = []
    # 遍历指定的行索引
    for row_index in row_indices:
        # 访问指定行,注意openpyxl中的行索引从1开始
        temp_row = [cell.value for cell in sheet[row_index]]
        # 将获取到的行数据添加到结果列表中
        data.append(temp_row)

    return data

获取指定列

  • 这个函数和上面的函数一毛一样,但注意,输入的列表变成了指定行(比如:[“A”,“B”])
def read_specific_columns_from_excel(path, sheet_name, column_indices: List[str]):
    '''
    从xlsx格式文件的指定工作表中读取特定行的内容
    :param path: Excel文件的路径
    :param sheet_name: 要读取的工作表名
    :param column_indices: 一个包含要读取的列索引的列表(行号从A开始)
    :return: 一个列表的列表,其中每个内部列表包含一列中的数据
    '''
    workbook = openpyxl.load_workbook(path)
    sheet = workbook[sheet_name]
    data = []

    # 遍历指定的行索引
    for column_index in column_indices:
        # 访问指定行,注意openpyxl中的行索引从1开始
        temp_column = [cell.value for cell in sheet[column_index]]
        # 将获取到的行数据添加到结果列表中
        data.append(temp_column)

    return data

新建并写入

def write_xlsx_excel(path, sheet_name, rows_data):
    """
    写入xlsx格式文件
    :param path: Excel文件的保存路径
    :param sheet_name: 工作表的名称
    :param rows_data: 二维数组,包含要写入的行数据
    """
    workbook = openpyxl.Workbook()
    sheet = workbook.create_sheet(title=sheet_name)

    # 整行写入
    for row in rows_data:
        sheet.append(row)

    workbook.save(path)

写入指定行

workbook = openpyxl.load_workbook('example.xlsx')
sheet = workbook['Sheet']
# 二维数组
sheet.cell(row=2, column=4, value="写入指定")

workbook.save('example.xlsx')
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值