Python自動(dòng)化辦公Excel模塊openpyxl原理及用法解析
openpyxl 介紹
openpyxl 是一個(gè)直接可用于讀寫 xlsx 、xlsm、xltx、xltm 文件的 Python 內(nèi)置庫(kù),借助它可以利用 Python 語(yǔ)法對(duì)本地 xlsx 文件進(jìn)行自動(dòng)化批量操作
先說(shuō)一下安裝部分,如果小伙伴們用 Anaconda 作為 Python 環(huán)境的話,openpyxl 無(wú)需安裝可直接使用;需要安裝的話方法也非常簡(jiǎn)單 pip 工具一行命令即可
pip install openpyxl
xlsx 文件屬性
在對(duì) Excel 表格處理之前,需要了解一下 xlsx 文件的幾個(gè)名詞解釋及構(gòu)造
1,Workbook 指的是神什么?
Workbook 名叫工作薄,可以代指一個(gè) xlsx 文件;
2, sheet、cell、row 、col 分別指的是什么?
關(guān)于問題2 ,可參考下圖(見注釋)
openpyxl 基本命令操作
1, 創(chuàng)建 一個(gè)空的 workbook
from openpypl import Wrokbook
from openpyxl.utils import get_column_letterwb = Workbook()
ws1 = wb.active
一個(gè) Workbook 默認(rèn)至少含有一個(gè) worksheet ,通過命令 Workbook.active 來(lái)獲取當(dāng)前第一個(gè) sheet(也就是第一個(gè) sheet);
2,創(chuàng)建新的 worksheet
ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
# or
ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position
可通過 create_sheet() 命令創(chuàng)建新的 worksheet , create_sheet 默認(rèn)有兩個(gè)參數(shù) name、index;
- name,定義 sheet 的名字;
- index,來(lái)設(shè)置插入 sheet 的位置,默認(rèn)為 None 即新創(chuàng)建的 sheet 插入到最后面;0 代表插入第一個(gè) sheet 的位置;
3,更改 sheet 的名字
一行代碼即可
ws.title = 'New Title'
4,更改 sheet 上 tab 背景顏色
ws.sheet_properties.tabColor = "1072BA"
通過修改 Wroksheet.sheet_properties.tabColor 參數(shù)即可,需要注意的是這里只接收 RRGGBB 顏色代碼;
關(guān)于不清楚 sheet tab 背景顏色不清楚是什么的小伙伴,可參考下圖;
5, 返回 Workbook 中所有 sheet 的名字
通過 Workbook.sheetname 命令即可查看
>>> print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']# 或者用迭代方法
>>> for sheet in wb:
... print(sheet.title)
6,將現(xiàn)有的 worksheets 復(fù)制新創(chuàng)建的 workbook 中
可通過 Workbook.copy_worksheet()函數(shù)方法
# 將 source 中的worksheet復(fù)制到 target 中去
source = wb.active
target = wb.copy_worksheet(source)
需要注意的是,當(dāng) workbook 為只讀或 只寫模式時(shí)不可復(fù)制;另外只有 cells(值,樣式,超鏈接、注釋) 和 特定的 worksheet 屬性(維度、格式、屬性)可以復(fù)制,其他的一些 workbook / worksheet 屬性不可復(fù)制( Images Charts 等)
7,獲取某個(gè) cell 的數(shù)據(jù)
成功創(chuàng)建完 Workbook、Worksheet 之后,接下來(lái)就可以修改 cell(單元格中的內(nèi)容,Cells 可以通過 worksheet 中特有關(guān)鍵詞來(lái)獲取
>>> c = ws['A4'] # 獲取第4行列名為A 單元格中的值
通過賦值命令對(duì)其修改
ws['A4'] = 4
openpyxl 中有一個(gè)函數(shù) Worksheet.cell() 可修改單元格中的數(shù)據(jù),可定位到具體行、具體列進(jìn)行更改,
d = ws.cell(row = 4,columns = 2,value = 10)
- row 表示指定行
- columns 表示指定列
- value 表示該單元格中需替代的數(shù)據(jù)值;當(dāng)此參數(shù)不設(shè)置時(shí)表示只對(duì)該 cell 創(chuàng)建內(nèi)存空間,不賦值
例如
>>> for x in range(1,101):
... for y in range(1,101):
... ws.cell(row=x, column=y)
8,獲取多個(gè)單元格
8.1 , openpyxl 也可以進(jìn)行切片操作,來(lái)獲取多個(gè)單元格
>>> cell_range = ws['A1':'C2']
8.2, worksheet 中多行多列數(shù)據(jù)獲取方式相似
>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]
8.3,Worksheet.iter_row() 來(lái)獲取 sheet 中行列范圍,再利用循環(huán)迭代獲取每一個(gè)單元格數(shù)據(jù)
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
8.4,Worksheet.iter_cols() 也可以實(shí)現(xiàn)同樣功能
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
... for cell in col:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>
需要注意的時(shí)在 read-only 模式中,Worksheet,iter_cols() 方法不能使用
9,只查看 cell 中的 value
9.1,只查看 worksheet 中的 value 時(shí),可通過 Worksheet.values 屬性,該屬性將迭代 worksheet 中所有行,但返回的僅僅是 cell values
for row in ws.values:
for value in row:
print(value)
9.2,通過 Worksheet.iter_rows() 和 Worksheet.iter_cols() 也可以實(shí)現(xiàn),在函數(shù)中加入一個(gè)參數(shù) values_only = True 即可返回 cell 的值
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
... print(row)(None, None, None)
(None, None, None)
10,讀寫文件操作
10,excel 文件加載
openpyxl.load_workbook() 函數(shù)來(lái)打開一個(gè)指定本地存儲(chǔ)的 xlsx 文件
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.sheetnames
['Sheet2', 'New Title', 'Sheet1']
10.2,excel 文件存儲(chǔ)
Workbook 修改成功后,后創(chuàng)建完成之后,通過Workbook.save(path) 命令即可保存至本地磁盤
>>> wb = Workbook()
>>> wb.save('balances.xlsx')
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
numpy實(shí)現(xiàn)RNN原理實(shí)現(xiàn)
這篇文章主要介紹了numpy實(shí)現(xiàn)RNN原理實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03使用Python的pencolor函數(shù)實(shí)現(xiàn)漸變色功能
這篇文章主要介紹了使用Python的pencolor函數(shù)實(shí)現(xiàn)漸變色功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03使用Python實(shí)現(xiàn)大學(xué)座位預(yù)約功能
這篇文章主要介紹了如何用Python實(shí)現(xiàn)大學(xué)座位預(yù)約,今天這個(gè)教程教你如何搶到座位,有座位了還怕聽不到課嗎?感興趣的朋友一起看看吧2022-03-03django前端頁(yè)面下拉選擇框默認(rèn)值設(shè)置方式
這篇文章主要介紹了django前端頁(yè)面下拉選擇框默認(rèn)值設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-08-08numpy中的隨機(jī)打亂數(shù)據(jù)方法np.random.shuffle解讀
這篇文章主要介紹了numpy中的隨機(jī)打亂數(shù)據(jù)方法np.random.shuffle解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Pandas時(shí)間數(shù)據(jù)處理詳細(xì)教程
日常工作中日期格式有多種表達(dá)形式,比如年份開頭或是月份開頭2022/6/4、6/4/2022等,通過pandas的日期數(shù)據(jù)處理,這篇文章主要給大家介紹了關(guān)于Pandas時(shí)間數(shù)據(jù)處理的相關(guān)資料,需要的朋友可以參考下2023-01-01