Python使用openpyxl庫操作Excel之(二)訪問已有的Excel檔案
阿新 • • 發佈:2019-01-22
①指定路徑開啟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')
不要忘記儲存哦~