天天看點

自動化操作Excel利器:Python第三方庫Openpyxl指南)

帶你走進 @ 機器人時代

Discover 點選上面藍色文字,關注我們

自動化操作Excel利器:Python第三方庫Openpyxl指南)

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利器:Python第三方庫Openpyxl指南)

在相同的目錄下生成了一個新的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')           

運作結果:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

如果我們需要建立表,可以使用下面的指令:

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')           

最後一定要記得儲存,參數裡面要寫上為檔案名:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

如果要删除表,使用下面的指令:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
del wb['倒數第二的位置']
wb.save('test1.xlsx')           

結果如下:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

可以看到,剛才建立的'倒數第二的位置'這個表被删除了!我們可以通過下面的指令來指定工作表:

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')           

運作結果如下:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

複制工作表:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
ws=wb.active
wb.copy_worksheet(ws)
wb.save('test1.xlsx')           

運作結果如下:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

可以通過下面指令獲得工作表的資訊:

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           

我們來驗證一下,執行前已經寫入一些資料:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

果然是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           

我們來看看:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

擷取單元格的屬性有哪些指令:

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')           

運作結果如下:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

在最後一行追加資料的方法:

from openpyxl import load_workbook
wb = load_workbook('test1.xlsx')
#在最後一行追加資料
ws=wb['第一個表']
ws.append([1, 2, 3])
wb.save('test1.xlsx')           

運作結果:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

讀取行和列的資料,準備資料如下

自動化操作Excel利器:Python第三方庫Openpyxl指南)

讀取代碼:

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行           

運作結果如下:

自動化操作Excel利器:Python第三方庫Openpyxl指南)

以上是Openpyxl的正常操作,如果需要設定樣式,插入公式等更多的應用,需要導入Openpyxl的其他子產品;

更多複雜的資料處理可能還會用到NumPy或者Pandas等第三方庫。

寫程式可能比不上熟練使用VBA來得快,但對于長期重複的操作,Python的優勢是顯而易見的。

堅持學習,每天都能進步一點點!

往期回顧:

  • 來來來,送你一個金牌銷售機器人,7X24小時不休,不要工資免費用!
  • RPA技術在旅行社銷售業務中如何鳳凰涅槃??
  • 【工資翻三倍】系列:一招搞定九宮圖檔切割機器人,讓你的朋友圈更加炫酷!

本文引用和摘錄相關内容,請聯系侵删。

- END -

最後,文章有幫助到你的話【點贊在看】

激勵我們分享更多的幹貨!