python学习笔记 - Excel工作簿、工作页、行列、单元格介绍

在使用Python对Excel的单元格进行操作之前,我们需要确保本地python库中成功安装了openpyxl类库。若没有安装该类库,则需要在【终端】借助pip工具安装:

# win:
pip install openpyxl
# mac
pip3 install openpyxl
# 若提示下载超时,则用以下的方式安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl

在Excel中,可将关注的对象分为:【工作簿】、【工作页】、【行/列】、【单元格】。openpyxl类库如何去获取他们呢:

1、工作簿


1.1、获取工作簿

工作簿即我们平时使用的Excel文档,我们平时需要使用Excel文档时,需要打开指定的Excel文档,或者新建Excel文档并打开。openpyxl打开文档的方式与我们平时的做法一致,也分为打开指定工作簿新建工作簿并打开两种:

  • 打开指定工作簿
    from openpyxl import load_workbook
    # 加载指定工作簿
    workbook = load_workbook('./测试文档1.xlsx')
    print(type(workbook))  # <class 'openpyxl.workbook.workbook.Workbook'>
    
  • 新建工作簿并打开
    from openpyxl import load_workbook
    # 新建工作簿
    workbook = Workbook()
    print(type(workbook))  # <class 'openpyxl.workbook.workbook.Workbook'>
    

获取到工作簿对象之后,我们就可以对这个工作簿文档进行下一步操作了,但工作簿不能直接操作数据,因为数据并不直接跟工作簿关联,而是跟这个工作簿下的所有工作页有着直接的关联。

1.2、保存工作簿

我们打开一个工作簿的目的,无非就是浏览或者修改,当我们仅用来浏览时,保存工作簿显得毫无意义。而当我们对工作簿中的内容进行修改时,那么我们就希望对修改后的内容进行保存。我们后续的操作,一般都是对工作页或者单元格进行修改,那么这些修改最终都归结与对工作簿的修改。所以我们对工作簿中的任何单元格、工作页之类的修改,最终该保存的对象都是工作簿对象。

在工作簿类(Workbook)中提供了save方法用于保存工作簿,虽然简单,但是我们还是看一下这个方法的参数:

def save(self, filename):
    if self.read_only:
        raise TypeError("""Workbook is read-only""")
    if self.write_only and not self.worksheets:
        self.create_sheet()
    save_workbook(self, filename)
参数类型说明
filename<class ‘str’>文件路径
首先,从参数上看,这个文件路径必须给定,无论你是以新建的方式打开的工作簿,还是以打开的指定工作簿,最终保存的时候,都需要给定保存文件路径。当最终保存的路径与打开的路径不一致时,其实就是我们常说的“另存为”。其次,从源码中我们可以看到,在保存之前首先判断了该文件的只读或只写情况下的处理方式。

🌰 最终,我们可以这样保存工作簿:

# 保存同目录下的 测试文档1.xlsx 文件
workbook.save('./测试文档1.xlsx')

2、工作页


工作页,也就是工作表或Sheet页,是我们平时对数据直接操作的页面。在新建一个Excel文档后,会默认新建一个交Sheet1的工作页并打开,用户也可以通过操作Sheet页栏来进行添加、修改、重命名工作页等操作。

2.1、获取工作页

我们在获取一个工作簿对象后,并不能直接操作工作页中的数据,必须先打开(或称之为激活)一张工作页,才能对工作页中对数据进行操作。Workbook工作簿类提供了两种打开其中工作页的方式:

  • 获取工作簿中已打开的工作页,若无工作页打开,则默认获取工作簿中的第一个工作页。
    打开的工作页是指这个工作页已经被某种方式激活,如我们已经通过Excel工具打开了一个工作簿,并且打开了指定的工作页,那么这个工作页就会处于“激活”状态,也就是打开状态。
    worksheet = workbook.active
    print(type(worksheet))  # <class 'openpyxl.worksheet.worksheet.Worksheet'>
    
  • 获取指定的工作页
    在这里插入图片描述
    sheet1 = workbook['Sheet1']
    sheet2 = workbook['Sheet2']
    

当我们获取到工作页对象后,我们就可以对这个工作页中的数据进行操作了。

2.2、重命名工作页

在获取到工作页对象后,就可以对这个工作页进行操作了,工作页类(Worksheet)提供了title属性,用于管理工作页名称。我们可以通过修改该属性值从而修改工作页的名称。
🌰 修改工作页的名称为测试工作页

worksheet.title = '测试工作页'

3、行 / 列


行与列,即是从水平方向与垂直方向对Excel中单元格进行的划分方式,对于openpyxl中的工作页对象(Worksheet)来说,他只是一个抽象出来的概念,并不存在真正的行与列对象,而是用一个元组代表了工作页中的一行或一列,这个元组中的元素即该行或列中的所有有效单元格对象。我们获取一行或一列的数据,其实就是获取该行或列中所有的单元格,并将这些单元格封装到元组中。

3.1、获取行 / 列

在一个Excel工作簿中,工作页管理着所有的单元格,所以我们希望获取行与列数据,就必须直接操作工作页对象,告诉它我期望如何获取想要的行与列:我们可以根据行号或列号获取指定的行或列,也可以遍历获取指定范围内的所有行与列数据。

  • 获取指定的一行 / 列

    # 获取第一行
    row = worksheet[1]
    print(type(row))  # <class 'tuple'>
    # 获取第一列
    col = worksheet['A']
    print(type(col))  # <class 'tuple'>
    
  • 通过遍历器获取行 / 列
    行遍历方法iter_rows与列遍历iter_cols在用法上一致,我们查看一下行遍历方法中的参数:

    def iter_rows(self, min_row=None, max_row=None,
                  min_col=None, max_col=None, values_only=False):
    
    参数说明
    min_row最小行索引,即开始遍历的行,默认值为None,表示从第一行开始。
    max_row最大索引行,即结束遍历的行,默认值为None,表示数据的最后一行。
    min_col最小索引列,即每行开始遍历的列,默认值为None,表示从第一列开始。
    max_col最大索引列,即每行结束遍历的列,默认值为None,表示数据到最后一列。
    values_only决定是否返回单元格的值,如果为True则返回单元格的值,如果为False则返回单元格对象。单元格对象需要通过cell.value的方式获取单元格的值。
    🌰 遍历第2行到第4行中第2列到第4列的值

在这里插入图片描述

~~~py
for row in worksheet.iter_rows(min_row=2, max_row=4, 
                               min_col=2, max_col=4, values_only=True):
    print(row)
# 输出结果
"""
(1, 38016.14, 45127.2)
(2, 33078.08, 40334.41)
(3, 43791.06, 51433.11)
"""
~~~

3.2、写入一行数据

工作页类(Worksheet)提供了append方法,用于添加一行数据,我们首先看看它的方法参数:

def append(self, iterable):
参数类型说明
iterable<class ‘list’>、<class ‘tuple’>可遍历的集合,如数组、元组。
append方法会在Excel工作页最后一行有效行后新建一行,并将记录以元组或数组中的顺序插入每个单元格中。
🌰 分别用元组与数组往工作页中插入记录
info_tuple = ('200004号项目', '4', '40000.00', '45000.00')
info_list = ['200005号项目', '5', '41000.00', '46000.00']
# 插入元组
worksheet.append(info_tuple)
# 插入列表
worksheet.append(info_list)

4、单元格


4.1、获取单元格

前文说过,单元格构成了行或列数据,其实从宏观的角度去看,单元格构成了整个工作页的数据。所以我们获取单元格,既可以直接通过工作页对象直接获取某个单元格,也可以通过已经获取到的行或列(元组),进一步遍历获取。

  • 从工作页中获取指定某个单元格
    # 获取第一行第一列单元格
    cell = worksheet['A1']
    
  • 通过遍历行 / 列元组方式获取每个单元格
    步骤3中提到,获取行 / 列最终都是以元组的方式返回的,我们若想获取其中的单元格,当然可以通过遍历的方式去获取。如:
    for cell in worksheet.iter_rows():
        print(type(cell[0]))  # <class 'openpyxl.cell.cell.Cell'>
    

4.2、写入或修改单元格

写入单元格就很简单了,单元格类(Cell)提供了value属性,使得我们可以通过为这个单元格赋值,从而达到赋值或修改值的目的。
🌰 写入A1单元格

cell = worksheet['A1']
cell.value = '填入的值'
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值