說起辦公自動化就離不開對excel表格的處理,現在哪個辦公族不得每天面對著幾份excel過日本子?本次活動同時在稀土掘金、博客園、微信公眾號舉辦,互不幹擾,歡迎各平臺搜索博主 ENG八戒 參與最新活動 ...
*以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「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八戒 參與最新活動】**