在正式介绍如何使用openpyxl包来操作Excel表之前,需要简单了解以下若干个和Excel相关的术语:
术语 | 解释 |
---|---|
工作簿(Spreadsheet或Workbook) | 工作簿就是用户创建的一个以.xlsx或.xls为后缀的文件 |
工作表(Worksheet或Sheet) | 工作表是一个工作簿中的一页,一个工作簿可能有多个工作表 |
列(Column) | 列,一般以大写字母表示,如:A |
行(Row) | 行,一般以数字表示,如:1 |
单元格(Cell) | 列和行的交汇处,一般以字母数字表示,如:A1 |
使用如下命令可以安装openpyxl
包:
pip install openpyxl
实际上,笔者尝试在Windows10平台上使用上述命令安装openpyxl
包时,遇到了以下两个问题,并通过对应方式得到了解决:
pip
包管理工具默认从境外的源下载,可以在命令后加选项-i 境内镜像源地址
进行换源安装;openpyxl
包,于是又在命令后加上--target=期望指定的路径
。因此,笔者通过下列命令快速完成了openpyxl
包的安装,并使之可以被正确导入使用:
pip install openpyxl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --target=C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib\site-packages
为了验证openpyxl
包的确被正确安装,并且可以正常使用,下面代码使用openpyxl
包创建一个简单的Excel表:
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet['A1'] = 'Hello'
sheet['B1'] = 'openpyxl'
workbook.save(filename='hello_openpyxl.xlsx')
为了更好演示如何使用openpyxl操作Excel,本文使用了阿里云天池的一个数据集,原数据格式为CSV,此处将其复制后转到了Excel中,原始数据集可以从此处下载得到。
下面在ipython中演示如何使用openpyxl
读取Excel:
>>> from openpyxl import load_workbook
>>> workbook = load_workbook(filename='sam_tianchi_mum_baby.xlsx')
>>> print(workbook.sheetnames) # 查看工作簿中的所有工作表
['Sheet 1', 'Sheet 2', 'Sheet 3']
>>> sheet = workbook.active # 获取活动的工作表,一般为第一个或最后一次修改的那个表
>>> sheet
<Worksheet "Sheet 1">
>>> sheet.title # 工作表的title属性可显示其名称
'Sheet 1'
在打开工作簿后,你就可以使用如下方式方便地从中获取想要的值:
>>> sheet['A1'] # 获取A1单元格对象
<Cell 'Sheet 1'.A1>
>>> sheet['A1'].value # 获取A1单元格的值
'user_id'
你也可以用.cell()
方法,通过行列的索引来获取某个单元格对象,进而使用.value
来获取单元格的值:
>>> sheet.cell(row=10, column=2)
<Cell 'Sheet 1'.B10>
>>> sheet.cell(row=10, column=2).value
20090708
需要指出的是,load_workbook()
函数的还有其他可选参数,这些参数可以改变Excel文件被导入后的行为,其中比较重要的有以下两个Bool
类型参数:
read_only
:可以只读模式导入一个Excel文件,这样就可以方便地打开较大的Excel文件;data_only
:导入时忽略Excel文件中的公式,只导入通过公式计算出的值。openpyxl
提供多种遍历Excel表的方式,你可以根据自身需求选择使用:
>>> sheet['A1:C2']
((<Cell 'Sheet 1'.A1>, <Cell 'Sheet 1'.B1>, <Cell 'Sheet 1'.C1>),
(<Cell 'Sheet 1'.A2>, <Cell 'Sheet 1'.B2>, <Cell 'Sheet 1'.C2>))
>>> # 获取某一列的所有的单元格
>>> sheet['A']
(<Cell 'Sheet 1'.A1>,
<Cell 'Sheet 1'.A2>,
<Cell 'Sheet 1'.A3>,
...
<Cell 'Sheet 1'.A954>)
>>> # 获取某几列的所有单元格
>>> sheet['A:B']
((<Cell 'Sheet 1'.A1>,
<Cell 'Sheet 1'.A2>,
...
<Cell 'Sheet 1'.A954>),
(<Cell 'Sheet 1'.B1>,
<Cell 'Sheet 1'.B2>,
...
<Cell 'Sheet 1'.B954>))
>>> # 获取某一行的所有单元格对象
>>> sheet[5]
(<Cell 'Sheet 1'.A5>, <Cell 'Sheet 1'.B5>, <Cell 'Sheet 1'.C5>)
>>> # 获取某几行的所有单元格对象
>>> sheet[5:6]
((<Cell 'Sheet 1'.A5>, <Cell 'Sheet 1'.B5>, <Cell 'Sheet 1'.C5>),
(<Cell 'Sheet 1'.A6>, <Cell 'Sheet 1'.B6>, <Cell 'Sheet 1'.C6>))
Data Class
本文地址:https://blog.csdn.net/weixin_37780776/article/details/107273705
如对本文有疑问, 点击进行留言回复!!
听课笔记--Python数据分析--Numpy基础及基本应用
Python-定时任务APScheduler中两种调度器的区别
网友评论