①指定路径打开Excel文件
使用openpyxl.load_workbook()方法来访问文件,括号内参数为文件的指定路径。
运行结果:
<class 'openpyxl.workbook.workbook.Workbook'>
下面大致了解一下该表格的内容,接下来我们会对它进行操作。
共有两个工作表,分别是op和ed, 工作表op的内容如下:
②获取工作表名
print(wb.sheetnames)
所有的工作表名将以列表形式返回:
['op', 'ed']
③创建和删除工作表
创建:
#用create_sheet()创建工作表
wb.create_sheet('new_ws1')
#可以指定index参数来指定新工作表在工作簿中的位置
wb.create_sheet('new_ws2', 0) #等价于wb.create_sheet(title='new_ws2', index=0)
print(wb.sheetnames)
运行结果:
['new_ws2', 'op', 'ed', 'new_ws1']
删除:
#用del删除工作表 或
#用remove_sheet()删除工作表 注意:参数不能是字符串名称,而是一个工作表对象
del wb['new_ws2'] #等价于wb.remove(wb['new_ws2'])
print(wb.sheetnames)
运行结果:
['op', 'ed', 'new_ws1']
④单元格的访问
ws = wb['op']
print(ws['B2'])
print(ws['B2'].value)
运行结果:
<Cell 'op'.B2>
R★O★C★K★S
每个单元格对象拥有row(行), column(列), coordinate(坐标)等属性:
c = ws['B2']
print(c.row, c.column, c.coordinate)
运行结果:
2 B B2
通过offset()方法偏移单元格, 第一个参数指定行, 第二个参数指定列。
c = ws['B2']
cl = c.offset(0, -1)
cr = c.offset(0, 1)
cu = c.offset(-1, 0)
cd = c.offset(1, 0)
c_list = [cl, cr, cu, cd]
for each in c_list:
print(each, ':', each.value)
运行结果:
<Cell 'op'.A2> : 1
<Cell 'op'.C2> : HOUND DOG
<Cell 'op'.B1> : 歌名
<Cell 'op'.B3> : 遥か彼方
⑤确定真正的列数
观察一个表格我们可以发现,它的列数是从字母A开始的,但有时候我们需要的列数远大于字母个数,它是怎么表示的呢?
#列数转化为字母
print(openpyxl.cell.cell.get_column_letter(666))
#字母转化为列数
print(openpyxl.cell.cell.column_index_from_string('ZH'))
运行结果:
YP
684
⑥“切片”访问多个单元格
ws = wb['op']
for each_cell_tuple in ws['A2:C30']:
for each_cell in each_cell_tuple:
print(each_cell.value, end=' ')
print('\n')
运行结果:
1 R★O★C★K★S HOUND DOG
2 遥か彼方 ASIAN KUNG-FU GENERATION
3 悲しみをやさしさに little by little
4 GO!!! Flow
5 青春狂騒曲 サンボマスター
6 ノーボーイ・ノークライ STANCE PUNKS
7 波风サテライト シュノーケル
8 Re:member(Album Mix) FLOW
9 ユラユラ Hearts Grow
10 Hero's Come Back!! nobodyknows+
......
⑦访问指定行和指定列
先尝试打印下面几行代码:
for each_row in ws.rows:
print(each_row)
for each_column in ws.columns:
print(each_column)
部分运行结果截图:
行数个由列数个对象组成的元组和列数个由行数个对象组成的元组。
所以,要访问某一行或某一列,加上下标索引即可。
eg:访问该表的第二列:
for each_row in ws.rows:
print(each_row[1].value)
运行结果:
歌名
R★O★C★K★S
遥か彼方
悲しみをやさしさに
GO!!!
青春狂騒曲
ノーボーイ・ノークライ
波风サテライト
Re:member(Album Mix)
ユラユラ
Hero's Come Back!!
distance
ブルーバード
CLOSER
ホタルノヒカリ
Sign
透明だった世界
Diver
ラヴァーズ
newsong
突撃ロック
......
⑧指定范围访问
eg:
for each_row in ws.iter_rows(min_row=1, min_col=3, max_row=3, max_col=5):
print(each_row)
(<Cell 'op'.C1>, <Cell 'op'.D1>, <Cell 'op'.E1>)
(<Cell 'op'.C2>, <Cell 'op'.D2>, <Cell 'op'.E2>)
(<Cell 'op'.C3>, <Cell 'op'.D3>, <Cell 'op'.E3>)
即表示C1:E3
⑨拷贝工作表
ws = wb['op']
ws_copy = wb.copy_worksheet(ws)
wb.save('火影忍者op&&ed.xlsx')
不要忘记保存哦~