01-openpyxl读取Excel(这么详细,不可能学不会)
·
基础知识
工作簿 workbook
表单 worksheet
行 row
列 column
单元格 cell
这里有个知识—— active
每个工作簿都有很多的工作表,默认是三个,我们把正在操作的那个称为活跃表单,也就是active
这个是本文用到的表格文档

ws = wb.active
# 将活跃的表单赋值然后进行操作,那么我们当前那张表单在界面前,就是操作的哪一个
正文
导入模块
import openpyxl
首先打开一个工作簿
# 导入一个Excel文件
wb = openpyxl.load_workbook('demo.xlsx')
查看工作簿中所有工作表的名称
print(wb.sheetnames)
['Sheet1', 'Sheet2']
- 返回一个列表形式的数据,意味着我们也可以利用索引来操作,由于wb是一个对象,这里用循环遍历
for sheet in wb:
print(sheet)
<Worksheet "Sheet1">
<Worksheet "Sheet2">
创建一个新的表单
mySheet = wb.create_sheet('mySheet')
print(wb.sheetnames)
['Sheet1', 'Sheet2', 'mySheet']
操作指定表单
# 第一种:使用 get_sheet_by_name()方法,指定表单名
sheet2 = wb.get_sheet_by_name('Sheet2') # 注意大小写
# 第二种:直接使用 wb对象 索引表单名
sheet3 = wb['mySheet']
查看指定表单的数据
sheet1 = wb['Sheet1']
print(sheet1)
<Worksheet "Sheet1">
print(sheet1['B2'])
<Cell 'Sheet1'.B2>
print(sheet1['B2'].value)
周一
定位单元格
# 使用索引名称直接找到单元格
print(sheet1['B2'])
<Cell 'Sheet1'.B2>
print(sheet1['B2'].value)
周一
# 使用Worksheet.cell()方法
# 注意:使用关键字参数指定行列,数字默认从1开始
print(sheet1.cell(row=4, column=2))
print(sheet1.cell(row=4, column=2).value)
<Cell 'Sheet1'.B4>
郑三
查看单元格属性
cell = sheet1['B3']
print('Row {}, Column {} is {}'.format(cell.row, cell.column, cell.value))
Row 3, Column 2 is 吴二
print('Cell {} is {}'.format(cell.coordinate, cell.value))
Cell B3 is 吴二
打印多行数据
for i in range(1,8): # 也可以指定步数
print(i, sheet1.cell(row=i, column=3).value)
1 2
2 101
3 102
4 103
5 103
6 104
7 104
# 当然循环只是其中一种方法,还有更简便的,请看下方取整行整列
取整列,取整行
# 直接用索引取出C列的所有数据,得到的cols只是所有单元格的对象,要取值的话,需要遍历出来value
cols = sheet1['C']
for c in cols:
print(c.value)
2
101
102
103
103
104
104
# 也可以用切片的方式,取出整列的区间
cols_range = sheet1['B:C']
for col in cols_range: # 首先先遍历出来B列,然后再是C列
for cell in col: # 遍历单独一列的每一个单元格的数据
print(cell.value) # 打印单元格的数据
# 这里结果过长就不再打印
# 取出单行
rows = sheet1[2]
for r in rows:
print(r.value)
A1
周一
101
2018-08-08 00:00:00
# 取出多行数据
rows_range = sheet1[2:5] # 这里行切片的起始是根据Excel的行号,不是默认从0开始
for col in rows_range:
for cell in col:
print(cell.value)
A1
周一
101
2018-08-08 00:00:00
A2
吴二
102
2018-08-09 00:00:00
A3
郑三
103
2018-08-10 00:00:00
A3
赵四
103
2018-08-10 00:00:00
使用生成器的方法访问多行多列
# 关键字参数的理解
# min_row 指定起始的行号
# max_row 指定结束的行号
# max_col 指定列的宽度
for rows in sheet1.iter_rows(min_row=1, max_row=2, max_col=3):
for row in rows: # 这里的rows是一整行的生成器对象
print(row.value)
0
1
2
A1
周一
101
指定一个行列范围来遍历取值
# 首先我们定义一个单元格的范围
cell_range = sheet1['A2:C4']
print(cell_range)
((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>),
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>))
# 可以看到cell_range这个对象中,每一行都单独成一个元组
for cell_row in cell_range:
for cell in cell_row: # 从每一个单独的元组中再遍历,然后输出单元格的值
print(cell.coordinate, cell.value)
A2 A1
B2 周一
C2 101
A3 A2
B3 吴二
C3 102
A4 A3
B4 郑三
C4 103
查看工作表的最大行,最大列
print('{} * {}'.format(sheet1.max_row, sheet1.max_column))
7 * 4
将索引进行互相转化
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(2), get_column_letter(10))
B J
print(column_index_from_string('AAJ'))
712
更多推荐
所有评论(0)