編程語言 Python 現(xiàn)如今如日中天,之所以如此繁榮,除了易學(xué)易學(xué)的特點之外,應(yīng)用場景更廣也是主要因素之一。除 Web 開發(fā),科學(xué)計算,AI 人工智能外,日常辦公也有 Python 的用武之地,今天我們來學(xué)習(xí) Python 操作 Excel。
Python 用于操作 Excel 的庫有很多,如:xlwings、pandas、xlsxwriter 等,今天我們用到的是很受歡迎的 openpyxl,官檔地址:https://openpyxl.readthedocs.io/en/latest/ ,該庫可以讀寫 Excel xlsx/xlsm/xltx/xltm。
編程初學(xué)者在學(xué)習(xí)一個新庫或框架時,往往會覺得要記的東西比較多,面對滿屏的函數(shù)、方法、屬性不知所措,覺得需要死記的東西太多,導(dǎo)致學(xué)習(xí)效率很低!有這種現(xiàn)象的一個主要原因是未深入理解面向?qū)ο缶幊?,今天我們?openpyxl 學(xué)習(xí)為例,換種思維方式,融入OOP 理念,你會發(fā)現(xiàn)編程其實很簡單。
面向?qū)ο缶幊趟枷胍粋€主要特點即是以人的思維習(xí)慣去分析、分解問題,簡單來講,可以將事物抽象為類,將對象所具備的特征和行為抽象為方法,代碼的定義抽象都是為描述、抽象現(xiàn)實中事物交互行為而服務(wù)的。
openpyxl 第三方功能庫,而非標準庫內(nèi)置,因而使用前先安裝到當(dāng)前 Python 環(huán)境,操作系統(tǒng)命令行下 `pip install openpyxl `即可安裝,目前最新版本為 2.6.3
作為對比學(xué)習(xí),我們打開 MS Office Excel 套件(本例為 Office 2016),看下基本界面:
Office Excel 基本界面及術(shù)語
先拋開代碼,從非開發(fā)人員角度,我們可以總結(jié)發(fā)現(xiàn)幾個對象:
接下來,同樣以非開發(fā)人員即普通辦公人員角度想象一下創(chuàng)建一個表格的幾個步驟:
前述以普通用戶角度分解了操作對象及過程,若以面向?qū)ο缶幊趟枷雭矸治?,便可以將前面的對象和過程作以下歸納:
不論哪種編程語言,符合面向?qū)ο缶幊趟枷氲拇a通常總是定義一組相關(guān)的類,用于抽象相關(guān)的對象,并將該對象具有的特征和行為抽象為屬性和方法。openpyxl 即符合這個機制和原則,理解這一點,有助于深入理解代碼組織形式,啟發(fā)思維。
接下來我們以程序的角度來分析分解前述創(chuàng)建工作簿、切換到指定工作表,并在特定單元格填充內(nèi)容,最終命名保存。原本由原來的 Office Excel 完成的工作,現(xiàn)在有 Python openpyxl 編程實現(xiàn)(內(nèi)存中操作)。
步驟:
1、內(nèi)存創(chuàng)建工作簿對象:
創(chuàng)建 工作簿
openpyxl.Workbook 類抽象工作簿對象,wb 作為在內(nèi)存中的對象引用
此時,相當(dāng)于 Excel 軟件創(chuàng)建一個空的工作簿
相當(dāng)于 Excel 執(zhí)行結(jié)果
2、 找到工作簿當(dāng)前激活的工作表
對應(yīng)工作表操作
此時相當(dāng)于定位切換至默認的工作表 “Sheet1”
對應(yīng) Excel 操作結(jié)果
此時可以修改內(nèi)存工作簿工作表 Sheet1 的標題名稱
修改工作表標題屬性
相當(dāng)于 Excel 雙擊改變工作表標簽文字
對應(yīng) Excel 操作結(jié)果
3. 操作單元格
定位行列單元格(由 Cell 類抽象)
定位獲取單元格對象引用
在單元格內(nèi)填充值
獲取或設(shè)置單元格 value 值
Cell.value 表示該單元格值, ws.rows 包含有數(shù)據(jù)的行集合
此時,相當(dāng)于 Excel 結(jié)果:
對應(yīng) Excel 結(jié)果
如果我們有批量的數(shù)據(jù),可以計算好行列索引,以批量寫入單元格
計算好行列索引,批量寫入單元格內(nèi)容
此時,相當(dāng)于 Excel 結(jié)果:
對應(yīng) Excel 結(jié)果
4. 保存工作簿至文檔
截止目前,所有的操作均映射在內(nèi)存中,wb.save('名稱.xlsx') 可以保存文檔至當(dāng)前位置
wb.save() 保存工作簿
使用 Excel 打開程序保存的 scores.xlsx 文件,我們發(fā)現(xiàn)最終生成的文檔與期望結(jié)果保持一致
最終保存的 Excel 文檔結(jié)果
本文以面向?qū)ο缶幊趟季S方式介紹了 openpyxl 庫的 Excel 基本操作處理,更多操作如:批量單元格處理、圖片插入、加載文檔等,小伙伴們可以使用同樣的思維方式思考對應(yīng)功能在庫中可能會有什么樣的對象類來抽象,以及什么樣的屬性方法分別映射特征和行為!理解這一樣,即使對查詢幫助也有更清晰的認識!
關(guān)于面向?qū)ο缶幊谭椒ǖ奶攸c、步驟以及更多實踐,可以參考我的專欄課程: