欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Python的openpyxl包操作Excel文件

程序员文章站 2022-04-19 10:03:22
这里写自定义目录标题使用文章在ubuntu上安装Python有两种方法中的方法安装Python3.8...

一、Excel表的相关术语

在正式介绍如何使用openpyxl包来操作Excel表之前,需要简单了解以下若干个和Excel相关的术语:

术语 解释
工作簿(Spreadsheet或Workbook) 工作簿就是用户创建的一个以.xlsx或.xls为后缀的文件
工作表(Worksheet或Sheet) 工作表是一个工作簿中的一页,一个工作簿可能有多个工作表
列(Column) 列,一般以大写字母表示,如:A
行(Row) 行,一般以数字表示,如:1
单元格(Cell) 列和行的交汇处,一般以字母数字表示,如:A1

二、安装openpyxl包

使用如下命令可以安装openpyxl包:

pip install openpyxl

实际上,笔者尝试在Windows10平台上使用上述命令安装openpyxl包时,遇到了以下两个问题,并通过对应方式得到了解决:

  • 安装速度很慢pip包管理工具默认从*的源下载,可以在命令后加选项-i 境内镜像源地址进行换源安装;
  • 无法安装至期望路径:笔者的计算机上先在D盘安装过了Anaconda,所以默认后续所有的包都安装到了Anaconda的路径下,导致无法导入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')

使用Python的openpyxl包操作Excel文件

三、用openpyxl操作Excel

为了更好演示如何使用openpyxl操作Excel,本文使用了阿里云天池的一个数据集,原数据格式为CSV,此处将其复制后转到了Excel中,原始数据集可以从此处下载得到

1. 用openpyxl读取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文件中的公式,只导入通过公式计算出的值。

2. 遍历Excel表中数据

openpyxl提供多种遍历Excel表的方式,你可以根据自身需求选择使用:

  • 使用类似切片的方式遍历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>))

3. 使用內置容器处理数据

4. 转换数据为Data Class

四、参考资料

本文地址:https://blog.csdn.net/weixin_37780776/article/details/107273705