python 的 openpyxl模块 读取 Excel文件的方法


Posted in Python onSeptember 09, 2019

Python 的 openpyxl 模块可以让我们能读取和修改 Excel 文件。

python 的 openpyxl模块 读取 Excel文件的方法

首先让我们先理解一些 Excel 基础概念。

1 Excel 基础概念

Excel 文件也称做为工作簿。每个工作簿可以包含多个工作表(Sheet)。用户当前查看的表或关闭 Excel 前最后查看的表,称为活动表。

每一张表都是由列和行构成的。列是以 A 开始的字母表示;而行是以 1 开始的数字表示的。由特定行和列所指定的方格称为单元格。每个单元格都可以包含一个数字或文本。这些单元格就构成了这张表。

2 安装 openpyxl

通过 pip 就可以安装最新版的 openpyxl。

pip install openpyxl

3 读取 Excel

假设有这样一份世界人口统计 Excel 文档,内容如下:

python 的 openpyxl模块 读取 Excel文件的方法

3.1 加载

wb = openpyxl.load_workbook('population.xlsx')
print('wb 类型 :')
print(type(wb), '\n')

运行结果:

python 的 openpyxl模块 读取 Excel文件的方法

wb 类型 : <class 'openpyxl.workbook.workbook.Workbook'>

导入 openpyxl 模块之后,就可以使用 openpyxl.load_workbook() 函数来加载 Excel 文档咯。这个 Excel 文件表示为 Workbook 对象。

注意:load_workbook() 函数中的文件,必须在当前工作目录。可以导入 os 模块,利用 os.getcwd() 来获悉当前工作目录。os 还提供了 chdir() 方法,可以改变当前工作目录。

import os
print('当前工作目录 :')
print(os.getcwd(), '\n')

运行结果:

python 的 openpyxl模块 读取 Excel文件的方法 

3.2 读取 Excel 工作表(sheet)

...
print('取得所有工作表的表名 :')
print(wb.sheetnames, '\n')

print('取得某张工作表 :')
sheet = wb['Sheet3']
print(type(sheet))
print('表名 - ' + sheet.title, '\n')

print('取得活动工作表 :')
active_sheet = wb.active
print('表名 - ' + active_sheet.title, '\n')

运行结果:

取得所有工作表的表名 : ['Sheet1', 'Sheet2', 'Sheet3']

取得某张工作表 : <class 'openpyxl.worksheet.worksheet.Worksheet'> 表名 - Sheet3

取得活动工作表 : 表名 - Sheet1

  • Workbook 对象的 sheetnames 属性可以获取所有 sheet 表的表名列表。
  • Workbook 对象的 active 属性,会获取当前活动表,即打开 Excel 时出现的工作表。
  • 获取 Worksheet 对象后,我们就可以通过 title 属性得到 sheet 的名称。

3.3 读取单元格 (Cell)

...
print('取得 A1 单元格 :')
cell = active_sheet['A1']
print(cell)
print(cell.value, '\n')

print('取得 B1 单元格 :')
cell = active_sheet['B1']
print(cell)
print(cell.value, '\n')

print('行号为 ' + str(cell.row) + ',列号为 ' + str(cell.column) + ' 的单元格,其值为 ' + cell.value, '\n')
print('单元格 ' + cell.coordinate + ' 其值为 ' + cell.value, '\n')

print('取得 C1 单元格的值 :')
print(active_sheet['C1'].value, '\n')

print('通过指定行与列,来获取单元格:')
print(active_sheet.cell(row=1, column=2))
print(active_sheet.cell(row=1, column=2).value)

print('迭代行与列,来获取单元格的值:')
for i in range(1, 8, 2):
  print(i, active_sheet.cell(row=i, column=2).value)
print('\n')

运行结果:

取得 A1 单元格 : <Cell 'Sheet1'.A1> 排名

取得 B1 单元格 : <Cell 'Sheet1'.B1> 国家

行号为 1,列号为 2 的单元格,其值为 国家

单元格 B1 其值为 国家

取得 C1 单元格的值 : 人口

通过指定行与列,来获取单元格: <Cell 'Sheet1'.B1> 国家 迭代行与列,来获取单元格的值: 1 国家 3 印度 5 印度尼西亚 7 巴基斯坦

可以通过单元格的名字(比如:A1)来获取 Cell 对象。

  •  Cell 对象的 value 属性,存放的是该单元格中所保存的值。
  • Cell 对象的 row、 column 和 coordinate 属性,存放的是该单元格的位置信息。
  • 用字母来指定列比较奇怪,因此我们也可以通过 sheet 的 cell 方法直接指定行(row)与列(column),来获取单元格 Cell 对象。

3.4 获取工作表大小

print('获取工作表的大小:')
print('总行数 -> ' + str(active_sheet.max_row))
print('总列数 -> ' + str(active_sheet.max_column))

运行结果:

获取工作表的大小: 总行数 -> 11 总列数 -> 4

Worksheet 对象的 max_row 与 max_column,可以获取工作表的总行数与总列数,即工作表的大小。

3.5 列转换函数

openpyxl 提供了两个函数,用于转换列号:

  • openpyxl.utils.get_column_letter -> 会把数字转化为字母。
  • openpyxl.utils.column_index_from_string -> 会把字母转化为数字。
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
...
print('列转换函数:')
print('[数字转换为字母]')
print('第 1 列 -> ' + get_column_letter(1))
print('第 2 列 -> ' + get_column_letter(2))
print('第 37 列 -> ' + get_column_letter(37))
print('第 818 列 -> ' + get_column_letter(818))
print('[字母转换为数字]')
print('第 A 列 -> ' + str(column_index_from_string('A')))
print('第 CC 列 -> ' + str(column_index_from_string('CC')))

运行结果:

[数字转换为字母] 第 1 列 -> A 第 2 列 -> B 第 37 列 -> AK 第 818 列 -> AEL [字母转换为数字] 第 A 列 -> 1 第 CC 列 -> 81

3.6 切片

我们可以对 Worksheet 对象切片,取得表格中的一个矩形区域,迭代遍历这个区域中的所有 Cell 对象。

print(tuple(active_sheet['A2':'D4']))
for row_objects in active_sheet['A2':'D4']:
  for cell_object in row_objects:
    print(cell_object.coordinate, cell_object.value)
  print('-- 当前行获取结束 --')

运行结果:

((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>), (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>)) A2 1 B2 中国 C2 13.83亿人(2016) D2 9634057 -- 当前行获取结束 -- A3 2 B3 印度 C3 1339180127 D3 2973190 -- 当前行获取结束 -- A4 3 B4 美国 C4 324459463 D4 9147420 -- 当前行获取结束 --
  • 这里首先通过 tuple() 方法,展示出了切片后的所有 Cell 对象。
  • 然后使用了两个 for 循环,外层 for 循环会遍历这个切片中的每一行;而内层 for 循环会遍历该行中的每个单元格。

 3.7 获取指定行或指定列

我们可以使用 Worksheet 对象的 rows 和 columns 属性,来获取指定行或者列:

print('获取特定行:')
print(list(active_sheet.rows)[2])
for cell_object in list(active_sheet.rows)[2]:
  print(cell_object.value)

print('获取特定列:')
print(list(active_sheet.columns)[2])
for cell_object in list(active_sheet.columns)[2]:
  print(cell_object.value)

运行结果:

获取特定行: (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>) 2 印度 1339180127 2973190 获取特定列: (<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.C6>, <Cell 'Sheet1'.C7>, <Cell 'Sheet1'.C8>, <Cell 'Sheet1'.C9>, <Cell 'Sheet1'.C10>, <Cell 'Sheet1'.C11>) 人口 13.83亿人(2016) 1339180127 324459463 263991379 209288278 197015955 190886311 164669751 143989754 129163276

  • Worksheet 对象的 rows 或者 columns 属性,都会返回一个由 “行元组” 构成的元组。每个行元组都拥有该行中的所有 Cell 对象。
  • 可以通过行元组的下标,来访问具体的 Cell 对象。

读取 Excel 步骤,总结如下:

  • 导入 openpyxl 模块。调用 openpyxl.load_workbook() 函数,加载 excel 文档,获取 Workbook 对象。
  • 调用 workbook#active 或 workbook[${sheet_name}],获取 sheet 工作簿。
  • 传入 row 和 column 关键字参数并调用索引或工作表的 cell() 方法,获取 Cell 对象。
  • 有了 Cell 对象,就可以执行具体的业务逻辑咯。

总结

以上所述是小编给大家介绍的python 的 openpyxl模块 读取 Excel文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python中计算三角函数之cos()方法的使用简介
May 15 Python
Python中enumerate函数代码解析
Oct 31 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
pytorch之ImageFolder使用详解
Jan 06 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
在python中修改.properties文件的操作
Apr 08 Python
基于python实现操作redis及消息队列
Aug 27 Python
Python调用飞书发送消息的示例
Nov 10 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
pymysql模块的使用(增删改查)详解
Sep 09 #Python
Django之模板层的实现代码
Sep 09 #Python
Django模板语言 Tags使用详解
Sep 09 #Python
Python中turtle库的使用实例
Sep 09 #Python
Django之路由层的实现
Sep 09 #Python
python中web框架的自定义创建
Sep 08 #Python
python web框架中实现原生分页
Sep 08 #Python
You might like
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
vue组件与复用详解
2018/04/08 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python比较2个xml内容的方法
2015/05/11 Python
python编写简单爬虫资料汇总
2016/03/22 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python飞机大战游戏实例讲解
2020/12/04 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
现金出纳岗位职责
2014/03/15 职场文书
球队口号
2014/06/18 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
欢迎词范文
2015/01/27 职场文书
失恋33天观后感
2015/06/11 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js