python的openpyxl模块读取Excel⽂件的⽅法
Python 的 openpyxl 模块可以让我们能读取和修改 Excel ⽂件。
⾸先让我们先理解⼀些 Excel 基础概念。
1 Excel 基础概念
Excel ⽂件也称做为⼯作簿。每个⼯作簿可以包含多个⼯作表(Sheet)。⽤户当前查看的表或关闭 Excel 前最后查看的表,称为活动表。
每⼀张表都是由列和⾏构成的。列是以 A 开始的字母表⽰;⽽⾏是以 1 开始的数字表⽰的。由特定⾏和列所指定的⽅格称为单元格。每个单元格都可以包含⼀个数字或⽂本。这些单元格就构成了这张表。
2 安装 openpyxl
通过 pip 就可以安装最新版的 openpyxl。
pip install openpyxl
3 读取 Excel
假设有这样⼀份世界⼈⼝统计 Excel ⽂档,内容如下:
3.1 加载
wb = openpyxl.load_workbook('population.xlsx')
print('wb 类型 :')
print(type(wb), '\n')
运⾏结果:
wb 类型 : <class 'openpyxl.workbook.workbook.Workbook'>
导⼊ openpyxl 模块之后,就可以使⽤openpyxl.load_workbook() 函数来加载 Excel ⽂档咯。这个 Excel ⽂件表⽰为 Workbook 对象。
注意:load_workbook() 函数中的⽂件,必须在当前⼯作⽬录。可以导⼊ os 模块,利⽤ os.getcwd() 来获悉当前⼯作⽬录。os 还提供了 chdir() ⽅法,可以改变当前⼯作⽬录。
import os
print('当前⼯作⽬录 :')
wd(), '\n')
运⾏结果:
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('⾏号为 ' + w) + ',列号为 ' + lumn) + ' 的单元格,其值为 ' + cell.value, '\n')
print('单元格 ' + dinate + ' 其值为 ' + cell.value, '\n')
print('取得 C1 单元格的值 :')
print(active_sheet['C1'].value, '\n')
print('通过指定⾏与列,来获取单元格:')
print(ll(row=1, column=2))
print(ll(row=1, column=2).value)
print('迭代⾏与列,来获取单元格的值:')
for i in range(1, 8, 2):
print(i, ll(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 提供了两个函数,⽤于转换列号:
_column_letter -> 会把数字转化为字母。
lumn_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(dinate, 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
这⾥⾸先通过 tuple() ⽅法,展⽰出了切⽚后的所有 Cell 对象。
然后使⽤了两个 for 循环,外层 for 循环会遍历这个切⽚中的每⼀⾏;⽽内层 for 循环会遍历该⾏中的每个单元格。
3.7 获取指定⾏或指定列
我们可以使⽤ Worksheet 对象的 rows 和 columns 属性,来获取指定⾏或者列:
print('获取特定⾏:')
print(list(ws)[2])
for cell_object in list(ws)[2]:
print(cell_object.value)
print('获取特定列:')
print(list(lumns)[2])
for cell_object in list(lumns)[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怎么读入excel
总结
以上所述是⼩编给⼤家介绍的python 的 openpyxl模块读取 Excel⽂件的⽅法,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!如果你觉得本⽂对你有帮助,欢迎转载,烦请注明出处,谢谢!