基础知识

工作簿 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
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐