1. 程式人生 > >Python使用openpyxl庫操作Excel之(二)訪問已有的Excel檔案

Python使用openpyxl庫操作Excel之(二)訪問已有的Excel檔案

①指定路徑開啟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')

不要忘記儲存哦~