*以下內容為本人的學習筆記,如需要轉載,請宣告原文連結 微信公眾號「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=2247485524&idx=1&sn=7af7790002e0e606bc2ba63f3a9a7327&chksm=f96cbcc0ce1b35d6079e63cb87964541c716c8b6b5e9969bb06ff4bcae8460e46293f0d3f306&token=365526592&lang=zh_CN#rd
正文開始之前,先給朋友們宣佈個好訊息,文末有送圖書和門票的福利活動,不要錯過哦!
今天週五,馬上就到下午6點鐘,該下班的時候了,小菜一把抓起手機刷起微信。
突然,她老闆跑來小菜身後拍了拍肩膀喊:“小菜啊,我這有幾份 excel 表格”,把小菜嚇了一跳,立馬放下手裡的手機。
老闆繼續說,“郵件發你了,裡邊都是這次的出貨單,明天來加會兒班弄好它,辛苦一下哈!” 說完也不等回應就轉身走了
“哎” 小菜狠狠地擠出一句話,卻在心裡嘀咕著要怎麼應付領導的吩咐,“怎麼那麼倒黴?又來 Excel 表,偏偏又到週末了,頭疼啊……哼 ”
雖然離她坐得很遠,看著小菜這麼苦惱,想起自己其實是個碼農,手裡也有點私貨,於是我走過去把自己私藏了很多年的公眾號推薦給了她。
說起辦公自動化就離不開對 excel 表格的處理,現在哪個辦公族不得每天面對著幾份 excel 過日子?那麼有沒有想過,讓機器幫我們自動處理這些雜活,而我們應該留給自己更多的時間去做一些更有意義的事情?
今天就帶大家一起來看看怎麼用 python 自動化處理 excel 表格!而處理 excel 表格的 python 功能庫有很多,常用的是 openpyxl。openpyxl 庫可以對 excel 表格做什麼呢?比如讀寫、算術、繪製圖表等等。
安裝 openpyxl
openpyxl 庫不是 python 的自帶模組,屬於第三方模組,所以需要額外安裝才能使用。
在安裝 openpyxl 庫之前,建議先配置好 python 工程的虛擬環境 venv。這裡不展開介紹如何配置虛擬環境,有需要可以點選 《Python:介面開發,wx入門篇 上》前往檢視。
本文以下內容基於 windows 10 和 Python3.
終端輸入
pip install openpyxl
終端輸出
由於下面的介紹會用到圖片操作的功能,所以還需要安裝 Pillow 庫。
終端輸入
pip install pillow
終端輸出
看看最後的安裝成果,終端輸入
pip list
終端輸出
建立 excel 表格檔案
最簡單的自動化操作就是建立一個 excel 空白表格檔案,暫定檔名為 test.xlsx,然後隨意寫點什麼進去
import openpyxl
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet['A1'] = 'hello pytho excel !'
workbook.save(filename="./test.xlsx")
上面的程式碼先是匯入了庫 openpyxl,然後例項化工作簿類 Workbook,透過工作簿的屬性 active 獲取到活躍的工作表 sheet。
基於字典的操作方式,對工作表 sheet 的 A 列 1 行寫入字串 ‘hello pytho excel !’。如果你使用過 excel 表格,會記得 excel 表格的行是從 1 開始的,列是從 A 開始的。
最後呼叫工作簿的 save 方法寫入硬碟,自動生成檔案 test.xlsx。
好了,程式碼寫好怎麼跑起來呢?
把上面寫好的程式碼儲存到檔案(.py)中,我這裡隨意定為 main.py,然後在令行終端裡輸入並回車就會執行起來
python main.py
執行完畢後,開啟程式建立好的 excel 檔案 test.xlsx 看看
看起來效果很好。
寫入
上面已經知道了怎麼建立新的 excel 表格檔案,那麼怎麼在已有的 excel 表格檔案的指定單元格 cell 寫入內容呢?
上面介紹的方法 Workbook() 會覆蓋原有檔案,為了不覆蓋現有檔案,可以改用方法 load_workbook() 同時傳入檔名以載入現有的工作簿。
指定單元格有兩種方式,透過表格 sheet 的方法 cell() 或者表格 sheet 直接引用單元格名稱。
比如
a2 = sheet.cell(row = 2, column = 1)
a3 = sheet['A3']
找到了單元格 cell,又怎麼寫入內容呢?直接賦值還是修改屬性值?答案是都可以,直接賦值就是對單元格 cell 物件賦值(要求引用單元格名稱),修改屬性是對單元格 cell 物件的 value 屬性賦值
a2.value = "修改屬性1"
a3.value = "修改屬性2"
sheet['A4'] = "直接賦值"
來一段完整的程式碼
import openpyxl
workbook = openpyxl.load_workbook("./test.xlsx")
sheet = workbook.active
a2 = sheet.cell(row = 2, column = 1)
a3 = sheet['A3']
a2.value = "修改屬性1"
a3.value = "修改屬性2"
sheet['A4'] = "直接賦值"
workbook.save(filename="./test.xlsx")
看看執行效果
如果我們需要往表格裡追加大量的資料呢?總不能像上面那樣往單元格一個一個地寫入吧?
可以使用表格 sheet 的 append() 方法一次性寫入一行資料
import openpyxl
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active
data = (
('a', 'b', 'c'),
('d', 'e', 'f')
)
for row in data:
sheet.append(row)
workbook.save('test.xlsx')
看看實際效果
讀取
上面介紹了怎麼對 excel 表格寫入內容,那麼怎麼讀出來呢?
讀取單元格內容,可以直接讀取單元格 cell 的屬性 value 值
print(f"{sheet['A4'].value}")
print(f"{sheet.cell(row = 4,
column = 1).value}")
那麼如果需要一次性讀取一個區域的資料呢?
方法有兩種,一種透過遍歷指定區域內每個單元格的方式,另一種是透過單元格名稱批次讀取。
先介紹第一種:需要遍歷每個單元格的內容,那麼就需要知道行列的最大數量用於控制單元格迴圈遍歷的次數,分別對應表格 sheet 的屬性 max_row 和屬性 max_column。
下面來試一下把第一列和第二行的所有單元格內容讀取並列印出來
import openpyxl
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active
row = sheet.max_row
column = sheet.max_column
print(f"Total Row num: {row}")
print(f"Total Column num: {column}")
print("\nValue of first column:")
for i in range(1, row + 1):
print(sheet.cell(row = i,
column = 1).value)
print("\nValue of second row")
for i in range(1, column + 1):
print(sheet.cell(row = 2,
column = i).value,
end = " ")
終端輸出
接著介紹第二種:透過表格的單元格名稱批次讀取時,單元格名稱分別對應矩形區域的左上角和右下角的單元格名稱。這種方式類似對列表的切片操作。
下面來試一下批次讀取單元格 A4 到單元格 C6 的矩形區域的內容,並列印出來
import openpyxl
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active
cell_obj = sheet['A5:C6']
for cell1, cell2, cell3 in cell_obj:
print(cell1.value,
cell2.value,
cell3.value)
終端輸出
圖書 《Python+Excel報表自動化實戰》
————————————
京東價:¥54.50
搶購連結:https://u.jd.com/Ks9SWZt
由於篇幅受限,本系列教程還未完結,下一篇《Python:Excel自動化實踐入門篇 乙》將在本公眾號稍後推送,如果你對此教程有興趣或者想和我一起交流更多精彩內容,歡迎關注我的微信公眾號 「ENG八戒」,等著你哦!
福利來了 !!!
這次搞了個雙重福利,兩份福利都可領取。
第一重,送圖書,這本書是機械工業出版社出版的《Python+Excel報表自動化實戰》。
請在評論區留言(主題圍繞上述圖書相關,不能與出海展會相關),並集贊,全文瀏覽量超過 1000 即統計每個評論集贊數量,集贊數量最多的一位獲得贈送圖書《Python+Excel報表自動化實戰》一本。如果出現多位評論滿足中獎條件則延後重新統計,等待瀏覽量增加超過 500 重新統計,依此類推,直到僅剩一位滿足中獎條件。
第二重,送深圳福田出海展會門票若干,門票由 Cloud Ace 傾情贊助。
Cloud Ace 是谷歌雲全球戰略合作伙伴,擁有 300 多名工程師,也是谷歌最高階別合作伙伴,多次獲得 Google Cloud 合作伙伴獎。作為谷歌託管服務商,提供谷歌雲、谷歌地圖、谷歌辦公套件、谷歌雲認證培訓服務。
請在評論區留言(主題圍繞出海展會相關,不能與上述圖書相關),並集贊,全文瀏覽量超過 800 即統計每個評論集贊數量,集贊數量最多的一位獲得贈送門票一張。如果出現多位評論滿足中獎條件則延後重新統計,等待瀏覽量增加超過 400 重新統計,依此類推,直到僅剩一位滿足中獎條件。
**【溫馨提示:本活動同時在稀土掘金、部落格園、微信公眾號舉辦,互不干擾,歡迎各平臺搜尋博主 ENG八戒 參與最新活動】**