帶你走進 @ 機器人時代
Discover 點選上面藍色文字,關注我們
Python函數入門必備:神奇的Excel自動化工具Openpyxl庫,網絡上一直是零零碎碎的教程,今天我們為大家總結一下:
三大子產品,我們将通過簡單的執行個體來介紹他們的用法:
1、Workbook操作工作簿的子產品(工作簿,一個excel檔案包含多個sheet。)
2、Worksheet操作表格的子產品(工作表,一個workbook有多個,表名識别,如“sheet1”,“sheet2”等。)
3、Cell操作單元格的子產品(單元格,存儲資料對象)
先建立一個對象,建立一個工作簿:
from openpyxl import Workbook
#建立一個工作簿,建立一個對象
new_wb=Workbook('test2.xlsx')
new_wb.save('test2.xlsx')
運作結果:
在相同的目錄下生成了一個新的excel檔案,如果讀取一個工作簿,我們使用如下代碼:
from openpyxl import load_workbook
#打開已有的工作簿,建立一個對象
wb = load_workbook('test1.xlsx')
# 激活目前sheet表
ws = wb.active
#列印目前工作表的名字
print(ws.title)
運作結果:
Sheet1
如果要修改工作表的名字,我們運作以下代碼:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws.title='第一個表'
wb.save('test1.xlsx')
運作結果:
如果我們需要建立表,可以使用下面的指令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
wb.create_sheet('最後的位置')
wb.create_sheet('倒數第二的位置',-1)
wb.create_sheet('最前面的位置',0)
wb.save('test1.xlsx')
最後一定要記得儲存,參數裡面要寫上為檔案名:
如果要删除表,使用下面的指令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
del wb['倒數第二的位置']
wb.save('test1.xlsx')
結果如下:
可以看到,剛才建立的'倒數第二的位置'這個表被删除了!我們可以通過下面的指令來指定工作表:
wb.sheetnames:# 擷取文檔所有工作表名稱,傳回一個清單
wb['Sheet1']:# 擷取指定的工作表
wb.active:# 擷取目前活躍的工作表
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#擷取所有的工作表名稱
print(wb.sheetnames)
#指定即将要操作的工作表
print(wb['Sheet2'])
#擷取目前激活的工作表
print(wb.active)
wb.save('test1.xlsx')
運作結果:
['最前面的位置', '第一個表', 'Sheet2', 'Sheet3',
'最後一個表', '最後的位置']
<Worksheet "Sheet2">
<Worksheet "最後的位置">
如果想修改目前表标簽的顔色:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#修改目前工作表标簽顔色(紅色)
ws=wb.active
ws.sheet_properties.tabColor = 'ff0000'
wb.save('test1.xlsx')
運作結果如下:
複制工作表:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
wb.copy_worksheet(ws)
wb.save('test1.xlsx')
運作結果如下:
可以通過下面指令獲得工作表的資訊:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
# 擷取文檔的字元集編碼
print(wb.encoding, end='\n\n')
# 擷取文檔的中繼資料如标題,建立者,建立日期等
print(wb.properties)
wb.save('test1.xlsx')
結果如下:
utf-8
<openpyxl.packaging.core.DocumentProperties object>
Parameters:
creator='openpyxl', title=None,
description=None, subject=None,
identifier=None, ........
如何擷取某一個表中的最大行和列呢?
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
y=ws.max_column
x=ws.max_row
print(x,y)
wb.save('test1.xlsx')
結果:
5 3
我們來驗證一下,執行前已經寫入一些資料:
果然是5行,3列的資料!如果要擷取其中單元格的值:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
# 擷取單元格的值
ws=wb.active
# 選擇單個單元格(擷取指定位置的單元格對象)
print(ws['A2'].value)
print(ws.cell(2, 1).value) # 先行後列,都是索引下标
wb.save('test1.xlsx')
結果:
6
6
我們來看看:
擷取單元格的屬性有哪些指令:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
# 擷取指定位置的單元格對象
cell = ws['B2']
print('單元格列索引',cell.col_idx)
print('單元格列索引',cell.column)
print('單元格的行索引',cell.row)
print('單元格列名',cell.column_letter)
print('單元格的坐标',cell.coordinate)
wb.save('test1.xlsx')
輸出:
單元格列索引 2
單元格列索引 2
單元格的行索引 2
單元格列名 B
單元格的坐标 B2
重點來了,怎麼修改單元格的值呢?
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#寫入單元格
ws=wb['第一個表']
#在A2單元格寫入資料
ws['A2']='寫入第1個資料'
#在第1行,第2列寫入資料
ws.cell(1,2).value='寫入第2個資料'
wb.save('test1.xlsx')
運作結果如下:
在最後一行追加資料的方法:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#在最後一行追加資料
ws=wb['第一個表']
ws.append([1, 2, 3])
wb.save('test1.xlsx')
運作結果:
讀取行和列的資料,準備資料如下
讀取代碼:
from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#讀取列的方法
ws=wb['第一個表']
#讀取第1列(方法1)
x=ws.max_row
s=ws[f'1:{x}']
print('第1列資料,方法1')
for i in s:
# print(type(i))
print(i[0].value)#元組需要下标
#讀取第1列(方法2)
p=ws['A']
print('第1列資料,方法2')
for j in p:
print(j.value)#對象不可下标
#讀取行的方法
#讀取第一行(方法1)
m=ws['1']
print('第1行資料,方法1')
for q in m:
print(q.value) # 對象不可下标
#讀取第一行(方法2)
n=ws['2:3']
print('第2行到第3行資料,方法2')
#獲得一個二維數組,需要2次循環取出資料
for d in n:
for u in d:
print(u.value)
wb.save('test1.xlsx')
輸出結果如下:
第1列資料,方法1
A1
A2
A3
第1列資料,方法2
A1
A2
A3
第1行資料,方法1
A1
B1
C1
第2行到第3行資料,方法2
A2
B2
C2
A3
B3
C3
删除行和列:
#删除行和列
ws.delete_cols(1) # 删除第一列,以此類推、n代表删除第n列
ws.delete_rows(1) # 删除第一行,以此類推、n代表删除第n行
運作結果如下:
以上是Openpyxl的正常操作,如果需要設定樣式,插入公式等更多的應用,需要導入Openpyxl的其他子產品;
更多複雜的資料處理可能還會用到NumPy或者Pandas等第三方庫。
寫程式可能比不上熟練使用VBA來得快,但對于長期重複的操作,Python的優勢是顯而易見的。
堅持學習,每天都能進步一點點!
往期回顧:
- 來來來,送你一個金牌銷售機器人,7X24小時不休,不要工資免費用!
- RPA技術在旅行社銷售業務中如何鳳凰涅槃??
- 【工資翻三倍】系列:一招搞定九宮圖檔切割機器人,讓你的朋友圈更加炫酷!
本文引用和摘錄相關内容,請聯系侵删。
- END -
最後,文章有幫助到你的話【點贊在看】
激勵我們分享更多的幹貨!