網(wǎng)站首頁 編程語言 正文
正式開始前依舊是模塊的安裝,使用如下命令即可實(shí)現(xiàn):
pip install openpyxl
官方對(duì)于該庫(kù)的描述是:
A Python library to read/write Excel 2010 xlsx/xlsm files
一款用于讀寫 Excel 2010 xlsx/xlsm 文件的庫(kù)。
1.打開已有 Excel 文件
拿到該庫(kù)之后,直接嘗試打開一個(gè)本地 Excel ,然后才能對(duì)其中的數(shù)據(jù)進(jìn)行控制。
from openpyxl import load_workbook wb = load_workbook('測(cè)試表格.xlsx') # 輸出 # <openpyxl.workbook.workbook.Workbook object at 0x00000195680F96D0>
繼續(xù)編碼前還是需要了解一些關(guān)于 Excel 的相關(guān)知識(shí)點(diǎn),如下所示:
- Excel 中列名是字母,行號(hào)是數(shù)字,例如鎖定第一個(gè)單元格是 A1,然后是 A2,接下來是A3;
- Excel 中有工作簿,工作表,單元格三個(gè)概念組成,對(duì)應(yīng)到?
openpyxl
?中就是?Workbook
?類,Worksheet
?類,Cell
?類。
操作 Excel 基本遵循三步走策略:
- 打開 Excel,產(chǎn)生 Workbook 對(duì)象;
- 獲取表格對(duì)象,即 Worksheet 對(duì)象;
- 操作表格中的單元格對(duì)象,即 Cell 對(duì)象。
有這些概念之后,你會(huì)發(fā)現(xiàn)后續(xù)的代碼就會(huì)變得極容易理解。
2.創(chuàng)建一個(gè) Excel 文件,并修改 sheet
接下來的代碼將會(huì)創(chuàng)建一個(gè) Excel 文件,并將第一個(gè)默認(rèn) sheet 修改為【測(cè)試】
import openpyxl if __name__ == '__main__': wb = openpyxl.Workbook() ws = wb.active # 更改第一個(gè) sheet 名稱 ws.title = "測(cè)試" # 保存 wb.save('example.xlsx')
在 Python 文件的運(yùn)行目錄會(huì)生成如下文件,打開關(guān)注第一個(gè) sheet 即可。
如果希望創(chuàng)建第二個(gè)表格頁(sheet),繼續(xù)在?Workbook
?對(duì)象中追加 sheet 即可。
import openpyxl if __name__ == '__main__': wb = openpyxl.Workbook() ws = wb.active # 更改第一個(gè) sheet 頁名稱 ws.title = "Sheet1" # 新增第二個(gè) sheet 頁 ws2 = wb.create_sheet("Sheet2") # 新增第三個(gè) sheet 頁 # 將 create_sheet() 函數(shù)中的第二個(gè)參數(shù)定義為 0,表示該 sheet 在最前面 ws3 = wb.create_sheet("Sheet3", 0) # 保存 wb.save('example.xlsx')
追加 sheet 使用的函數(shù)是?create_sheet()
?,在使用的時(shí)候,可以根據(jù)第二個(gè)參數(shù)進(jìn)行順序設(shè)置。
如果你希望對(duì) sheet 頁簽進(jìn)行更細(xì)節(jié)的設(shè)置,可以進(jìn)行屬性配置,例如修改 sheet 頁簽背景
import openpyxl if __name__ == '__main__': wb = openpyxl.Workbook() ws = wb.active # 更改第一個(gè) sheet 頁名稱 ws.title = "Sheet1" ws.sheet_properties.tabColor = "03a9f4" # 新增第二個(gè) sheet 頁 ws2 = wb.create_sheet("Sheet2") # 新增第三個(gè) sheet 頁 # 將 create_sheet() 函數(shù)中的第二個(gè)參數(shù)定義為 0,表示該 sheet 在最前面 ws3 = wb.create_sheet("Sheet3", 0) # 保存 wb.save('example.xlsx')
3.選擇 sheet 的不同方式
使用?wb["Sheet1"]
?可以通過類字典模式進(jìn)行 sheet 讀取,還可以使用?get_sheet_by_name()
?方法進(jìn)行調(diào)用,但是該方法已被棄用,建議掌握第一種用法即可。
import openpyxl if __name__ == '__main__': wb = openpyxl.Workbook() ws = wb.active # 更改第一個(gè) sheet 頁名稱 ws.title = "Sheet1" ws_1 = wb["Sheet1"] ws_1_1 = wb.get_sheet_by_name("Sheet1") # 該方法將被棄用,建議用上述形式調(diào)用 print(ws_1) print(ws_1_1) # wb.save('example.xlsx')
4.Worksheet對(duì)象
Worksheet 對(duì)象即表格對(duì)象,用于得到單元格中的數(shù)據(jù),修改表格中的內(nèi)容。
優(yōu)先學(xué)習(xí)的相關(guān)屬性如下所示:
-
title
:表格的標(biāo)題; -
dimensions
:表格數(shù)據(jù)區(qū)域大小; -
max_row
:表格的最大行; -
min_row
:表格的最小行; -
max_column
:表格的最大列; -
min_column
:表格的最小列; -
rows
:按行獲取單元格(Cell)對(duì)象 ,返回生成器; -
columns
:按列獲取單元格(Cell對(duì)象),返回生成器。
具體代碼如下所示,其中用到的表格參考下述截圖:
from openpyxl import load_workbook wb = load_workbook('測(cè)試表格.xlsx') if __name__ == '__main__': ws = wb.active # 更改第一個(gè) sheet 頁名稱 ws.title = "My_Sheet" ws_1 = wb["My_Sheet"] print(ws_1.title) # 獲取標(biāo)題 print(ws_1.dimensions) # 有數(shù)據(jù)的區(qū)域大小,無數(shù)據(jù)是 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 對(duì)象的方法如下所示 Worksheet方法如下:
-
iter_rows
:按行獲取所有單元格,其值可以調(diào)用 Cell 的屬性(min_row, max_row, min_col, max_col); -
iter_columns
:按列獲取所有的單元格 -
append
:在表格末尾添加數(shù)據(jù) -
merged_cells
:合并多個(gè)單元格 -
unmerged_cells
:移除合并的單元格
Worksheet 對(duì)象的屬性和方法基本都會(huì)返回 Cell對(duì)象,即單元格對(duì)象。
5.Cell 對(duì)象
Cell對(duì)象比較簡(jiǎn)單,常用的屬性如下:
-
row
?:?jiǎn)卧袼诘男?/li> -
column
:?jiǎn)卧褡诘牧?/li> -
value
:?jiǎn)卧竦闹?/li> -
coordinate
:?jiǎn)卧竦淖鴺?biāo)
from openpyxl import load_workbook wb = load_workbook('測(cè)試表格.xlsx') if __name__ == '__main__': ws = wb.active for item in ws.rows: print(item) # 按照行輸出 print(item[0].value) # 輸出單元格的值
操作修改單元格數(shù)據(jù)?獲取單元格之后,就可以對(duì)其中的值進(jìn)行操作,例如下述代碼
from openpyxl import load_workbook wb = load_workbook('測(cè)試表格.xlsx') if __name__ == '__main__': ws = wb.active # 輸出修改前 for item in ws.rows: print(item) # 按照行輸出 print(item[0].value) # 輸出單元格的值 item[0].value = 1 # 輸出修改后的值,注意不保存文件,數(shù)據(jù)不會(huì)存儲(chǔ) for item in ws.rows: print(item[0].value) # 輸出單元格的值 # wb.save('example.xlsx')
單元格內(nèi)容修改完畢之后,需要使用?wb.save()
?方法才可以存儲(chǔ)文件修改之后的內(nèi)容。
使用行列式定位單元格?使用工作表的?cell()
?方法,可以定位到單元格,具體用法如下所示
from openpyxl import load_workbook wb = load_workbook('測(cè)試表格.xlsx') if __name__ == '__main__': ws = wb.active # 輸出修改前 for item in ws.rows: print(item) # 按照行輸出 print(item[0].value) # 輸出單元格的值 item[0].value = 1 # 輸出修改后的值,注意不保存文件,數(shù)據(jù)不會(huì)存儲(chǔ) for item in ws.rows: print(item[0].value) # 輸出單元格的值 # 直接定位單元格 c = ws.cell(row=2, column=3) print(c) print("單元格A2,B3里面的內(nèi)容是",c.value) wb.save('example.xlsx')
6.單元格插入圖像
使用如下代碼,可以在Excel 中的單元格內(nèi)添加圖片。 在正式編碼前,先導(dǎo)入如下模塊
from openpyxl.drawing.image import Image
接下來就可以在對(duì)應(yīng)的單元格中去添加相應(yīng)的圖片了,具體代碼如下所示,其中比較重要的是?add_image()
?方法。
# 創(chuàng)建圖像,參數(shù)是圖片路徑 img = Image('cup_PNG2001.png') # add_image(圖片,要添加單元格的位置) ws.add_image(img, 'A2') wb.save('example.xlsx')
7.設(shè)置單元格樣式
在 Excel 中,我們可以針對(duì)單元格樣式進(jìn)行操作,例如加粗,傾斜,背景色。
需要提前導(dǎo)入的相關(guān)類:
from openpyxl.styles import Font, colors, Alignment
接下來可以修改相應(yīng)的字體:
from openpyxl import load_workbook from openpyxl.styles import Font, colors, Alignment wb = load_workbook('測(cè)試表格.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')
運(yùn)行結(jié)果如下所示,注意 A1 單元格相關(guān)變化。在這里需要注意代碼中只要存在一處錯(cuò)誤,新的樣式就不會(huì)起到作用。
其它內(nèi)容你可自行進(jìn)行擴(kuò)展,例如設(shè)置對(duì)齊方式
ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
行高,列寬,單元格合并與取消合并,這些內(nèi)容由你自行完成。
原文鏈接:https://juejin.cn/post/7077365551688859679
相關(guān)推薦
- 2023-03-15 Native層消息機(jī)制深入探究實(shí)例解析_Android
- 2022-06-26 React?Native?加載H5頁面的實(shí)現(xiàn)方法_React
- 2022-09-03 docker鏡像管理命令詳解_docker
- 2022-03-30 Android?RecyclerView曝光采集的實(shí)現(xiàn)方法_Android
- 2022-10-17 PaddleOCR?識(shí)別表情包文字示例詳解_python
- 2022-08-28 flask?route對(duì)協(xié)議作用及設(shè)計(jì)思路_python
- 2022-07-10 理解setuid()、setgid()和sticky位
- 2022-10-25 python繪圖之坐標(biāo)軸的超詳細(xì)講解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支