Python使用openpyxl库操作Excel之访问已有的Excel文件

2022-08-08 12:05:19

①指定路径打开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')

不要忘记保存哦~

  • 作者:Gsdxiaohei
  • 原文链接:https://blog.csdn.net/Gsdxiaohei/article/details/82052889
    更新时间:2022-08-08 12:05:19