Python?操作?Excel?之?openpyxl?模塊
正式開始前依舊是模塊的安裝,使用如下命令即可實現(xiàn):
pip install openpyxl
官方對于該庫的描述是:
A Python library to read/write Excel 2010 xlsx/xlsm files
一款用于讀寫 Excel 2010 xlsx/xlsm 文件的庫。
1.打開已有 Excel 文件
拿到該庫之后,直接嘗試打開一個本地 Excel ,然后才能對其中的數(shù)據進行控制。
from openpyxl import load_workbook
wb = load_workbook('測試表格.xlsx')
# 輸出
# <openpyxl.workbook.workbook.Workbook object at 0x00000195680F96D0>繼續(xù)編碼前還是需要了解一些關于 Excel 的相關知識點,如下所示:
- Excel 中列名是字母,行號是數(shù)字,例如鎖定第一個單元格是 A1,然后是 A2,接下來是A3;
- Excel 中有工作簿,工作表,單元格三個概念組成,對應到
openpyxl中就是Workbook類,Worksheet類,Cell類。
操作 Excel 基本遵循三步走策略:
- 打開 Excel,產生 Workbook 對象;
- 獲取表格對象,即 Worksheet 對象;
- 操作表格中的單元格對象,即 Cell 對象。
有這些概念之后,你會發(fā)現(xiàn)后續(xù)的代碼就會變得極容易理解。
2.創(chuàng)建一個 Excel 文件,并修改 sheet
接下來的代碼將會創(chuàng)建一個 Excel 文件,并將第一個默認 sheet 修改為【測試】
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一個 sheet 名稱
ws.title = "測試"
# 保存
wb.save('example.xlsx')在 Python 文件的運行目錄會生成如下文件,打開關注第一個 sheet 即可。

如果希望創(chuàng)建第二個表格頁(sheet),繼續(xù)在 Workbook 對象中追加 sheet 即可。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一個 sheet 頁名稱
ws.title = "Sheet1"
# 新增第二個 sheet 頁
ws2 = wb.create_sheet("Sheet2")
# 新增第三個 sheet 頁
# 將 create_sheet() 函數(shù)中的第二個參數(shù)定義為 0,表示該 sheet 在最前面
ws3 = wb.create_sheet("Sheet3", 0)
# 保存
wb.save('example.xlsx')追加 sheet 使用的函數(shù)是 create_sheet() ,在使用的時候,可以根據第二個參數(shù)進行順序設置。

如果你希望對 sheet 頁簽進行更細節(jié)的設置,可以進行屬性配置,例如修改 sheet 頁簽背景
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一個 sheet 頁名稱
ws.title = "Sheet1"
ws.sheet_properties.tabColor = "03a9f4"
# 新增第二個 sheet 頁
ws2 = wb.create_sheet("Sheet2")
# 新增第三個 sheet 頁
# 將 create_sheet() 函數(shù)中的第二個參數(shù)定義為 0,表示該 sheet 在最前面
ws3 = wb.create_sheet("Sheet3", 0)
# 保存
wb.save('example.xlsx')
3.選擇 sheet 的不同方式
使用 wb["Sheet1"] 可以通過類字典模式進行 sheet 讀取,還可以使用 get_sheet_by_name() 方法進行調用,但是該方法已被棄用,建議掌握第一種用法即可。
import openpyxl
if __name__ == '__main__':
wb = openpyxl.Workbook()
ws = wb.active
# 更改第一個 sheet 頁名稱
ws.title = "Sheet1"
ws_1 = wb["Sheet1"]
ws_1_1 = wb.get_sheet_by_name("Sheet1") # 該方法將被棄用,建議用上述形式調用
print(ws_1)
print(ws_1_1)
# wb.save('example.xlsx')4.Worksheet對象
Worksheet 對象即表格對象,用于得到單元格中的數(shù)據,修改表格中的內容。
優(yōu)先學習的相關屬性如下所示:
title:表格的標題;dimensions:表格數(shù)據區(qū)域大??;max_row:表格的最大行;min_row:表格的最小行;max_column:表格的最大列;min_column:表格的最小列;rows:按行獲取單元格(Cell)對象 ,返回生成器;columns:按列獲取單元格(Cell對象),返回生成器。
具體代碼如下所示,其中用到的表格參考下述截圖:
from openpyxl import load_workbook
wb = load_workbook('測試表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 更改第一個 sheet 頁名稱
ws.title = "My_Sheet"
ws_1 = wb["My_Sheet"]
print(ws_1.title) # 獲取標題
print(ws_1.dimensions) # 有數(shù)據的區(qū)域大小,無數(shù)據是 A1:A1
print(ws_1.max_row) # 最大行數(shù)
print(ws_1.min_row) # 最小行數(shù)
print(ws_1.max_column)
print(ws_1.min_column)
print(ws_1.rows)
print(ws_1.columns)
除屬性外,Worksheet 對象的方法如下所示 Worksheet方法如下:
iter_rows:按行獲取所有單元格,其值可以調用 Cell 的屬性(min_row, max_row, min_col, max_col);iter_columns:按列獲取所有的單元格append:在表格末尾添加數(shù)據merged_cells:合并多個單元格unmerged_cells:移除合并的單元格
Worksheet 對象的屬性和方法基本都會返回 Cell對象,即單元格對象。
5.Cell 對象
Cell對象比較簡單,常用的屬性如下:
row:單元格所在的行column:單元格坐在的列value:單元格的值coordinate:單元格的坐標
from openpyxl import load_workbook
wb = load_workbook('測試表格.xlsx')
if __name__ == '__main__':
ws = wb.active
for item in ws.rows:
print(item) # 按照行輸出
print(item[0].value) # 輸出單元格的值操作修改單元格數(shù)據 獲取單元格之后,就可以對其中的值進行操作,例如下述代碼
from openpyxl import load_workbook
wb = load_workbook('測試表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 輸出修改前
for item in ws.rows:
print(item) # 按照行輸出
print(item[0].value) # 輸出單元格的值
item[0].value = 1
# 輸出修改后的值,注意不保存文件,數(shù)據不會存儲
for item in ws.rows:
print(item[0].value) # 輸出單元格的值
# wb.save('example.xlsx')單元格內容修改完畢之后,需要使用 wb.save() 方法才可以存儲文件修改之后的內容。
使用行列式定位單元格 使用工作表的 cell() 方法,可以定位到單元格,具體用法如下所示
from openpyxl import load_workbook
wb = load_workbook('測試表格.xlsx')
if __name__ == '__main__':
ws = wb.active
# 輸出修改前
for item in ws.rows:
print(item) # 按照行輸出
print(item[0].value) # 輸出單元格的值
item[0].value = 1
# 輸出修改后的值,注意不保存文件,數(shù)據不會存儲
for item in ws.rows:
print(item[0].value) # 輸出單元格的值
# 直接定位單元格
c = ws.cell(row=2, column=3)
print(c)
print("單元格A2,B3里面的內容是",c.value)
wb.save('example.xlsx')6.單元格插入圖像
使用如下代碼,可以在Excel 中的單元格內添加圖片。 在正式編碼前,先導入如下模塊
from openpyxl.drawing.image import Image
接下來就可以在對應的單元格中去添加相應的圖片了,具體代碼如下所示,其中比較重要的是 add_image() 方法。
# 創(chuàng)建圖像,參數(shù)是圖片路徑
img = Image('cup_PNG2001.png')
# add_image(圖片,要添加單元格的位置)
ws.add_image(img, 'A2')
wb.save('example.xlsx')7.設置單元格樣式
在 Excel 中,我們可以針對單元格樣式進行操作,例如加粗,傾斜,背景色。
需要提前導入的相關類:
from openpyxl.styles import Font, colors, Alignment
接下來可以修改相應的字體:
from openpyxl import load_workbook
from openpyxl.styles import Font, colors, Alignment
wb = load_workbook('測試表格.xlsx')
if __name__ == '__main__':
ws = wb.active
c_style = Font(size=20, bold=True, italic=True, color='ff0000')
ws['A1'].font = c_style
wb.save('example.xlsx')運行結果如下所示,注意 A1 單元格相關變化。在這里需要注意代碼中只要存在一處錯誤,新的樣式就不會起到作用。

其它內容你可自行進行擴展,例如設置對齊方式
ws['B1'].alignment = Alignment(horizontal='center', vertical='center')

行高,列寬,單元格合并與取消合并,這些內容由你自行完成。
到此這篇關于Python 操作 Excel 之 openpyxl 模塊的文章就介紹到這了,更多相關python openpyxl 模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)操縱控制windows注冊表的方法分析
這篇文章主要介紹了Python實現(xiàn)操縱控制windows注冊表的方法,結合實例形式分析了Python使用_winreg模塊以及win32api模塊針對Windows注冊表操作相關實現(xiàn)技巧,需要的朋友可以參考下2019-05-05
Pyecharts 動態(tài)地圖 geo()和map()的安裝與用法詳解
這篇文章主要介紹了Pyecharts 動態(tài)地圖 geo()和map()的安裝與用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
Python模擬登錄requests.Session應用詳解
這篇文章主要介紹了Python模擬登錄requests.Session應用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
探索Python元類的魅力:靈活定制類的創(chuàng)建過程
在Python編程中,元類(Metaclass)是一項高級特性,它允許我們在定義類的時候動態(tài)地控制類的創(chuàng)建過程。元類提供了一種強大的機制,可以對類進行定制化,擴展其功能,并在類的實例化過程中執(zhí)行額外的操作,本文將深入解析2023-10-10
python的ping網絡狀態(tài)監(jiān)測的實現(xiàn)(含多IP)
本文主要介紹了python的ping網絡狀態(tài)監(jiān)測的實現(xiàn)(含多IP),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03

