杜志超,許 中,冉 靜,黃碧珍,林躍藝
(廈門(mén)大學(xué)附屬第一醫(yī)院,福建 廈門(mén) 361003)
Microsoft Excel 是微軟推出的包含在Microsoft Office 內(nèi)獨(dú)立的一款辦公軟件。Excel 作為微軟旗下Office 系列辦公軟件中的一員,擁有強(qiáng)大的計(jì)算、分析、傳遞和共享功能,可以幫助我們將繁雜的數(shù)據(jù)轉(zhuǎn)化為信息,是一款在各行各業(yè)中被廣泛使用的數(shù)據(jù)處理的工具。盡管Excel 的功能十分強(qiáng)大,但在諸多常見(jiàn)的數(shù)據(jù)處理和分析工作中,尤其是批量文件處理時(shí),通常需要用戶通過(guò)靈活地組合使用包含函數(shù)、VBA 等高級(jí)功能才能完成任務(wù),這對(duì)于很多人而言,是一個(gè)十分艱難的學(xué)習(xí)和使用過(guò)程。Python是一種可在多數(shù)平臺(tái)上寫(xiě)腳本和快速開(kāi)發(fā)應(yīng)用的、十分受歡迎的編程語(yǔ)言。本文通過(guò)介紹Python 第三方Excel 讀寫(xiě)庫(kù)xlwings,并以醫(yī)師腫瘤藥品權(quán)限申請(qǐng)匯總為例,闡述其在批量Excel 文件處理中的用法。本文所有程序基于Python 3.9.7和xlwings 0.25.3。
xlwings是一款開(kāi)源且免費(fèi)的Python第三方庫(kù),可在Windows 和macOS 系統(tǒng)上運(yùn)行。借助xlwings,用戶不僅能夠非常便捷地對(duì).xls和.xlsx 的Excel后綴文件進(jìn)行讀取、寫(xiě)入、修改、保存、樣式調(diào)整、圖片插入等操作,而且還可以通過(guò)與NumPy、Pandas、Matplotlib、scikit-learn 等強(qiáng)大的Python 第三方庫(kù)結(jié)合使用,實(shí)現(xiàn)數(shù)據(jù)挖掘、數(shù)據(jù)分析和報(bào)表制作等功能。
本文以實(shí)際工作中醫(yī)師腫瘤藥品權(quán)限申請(qǐng)匯總場(chǎng)景為例,介紹xlwings 在批量Excel 文件數(shù)據(jù)加工中的應(yīng)用。
數(shù)據(jù)來(lái)源為:每個(gè)臨床科室分別提交的醫(yī)生申請(qǐng)表,數(shù)據(jù)來(lái)源樣表見(jiàn)表1(注:僅展示部分字段),表中表頭帶*號(hào)的為必輸字段,其余字段為選擇“申請(qǐng)腫瘤藥品序號(hào)”后,Excel自動(dòng)帶出的不可編輯信息。
表1 醫(yī)師腫瘤藥品權(quán)限申請(qǐng)樣表
目標(biāo)輸出為:合并匯總所有臨床科室的申請(qǐng)表信息,按藥品、科室分別匯總申請(qǐng)人信息,結(jié)果輸出樣表見(jiàn)表2(注:僅展示部分字段)。
表2 結(jié)果輸出樣表
創(chuàng)建Python 字典對(duì)象apply_info 用于存儲(chǔ)申請(qǐng)數(shù)據(jù),具體結(jié)構(gòu)樣例如下:
通過(guò)xlwings 逐行讀取Excel 申請(qǐng)表中的數(shù)據(jù),存儲(chǔ)至apply_info中,具體實(shí)現(xiàn)如下:
將所有臨床科室的申請(qǐng)表放入同一文件夾中,通過(guò)遍歷文件夾中的文件,將所有申請(qǐng)數(shù)據(jù)存儲(chǔ)至apply_info中,具體實(shí)現(xiàn)如下:
將藥品信息按藥品序號(hào)作升序排序(假定藥品序號(hào)為從1 開(kāi)始的連續(xù)值,則藥品序號(hào)即為所在行號(hào)減1),并按目標(biāo)輸出格式制作成模板。遍歷申請(qǐng)數(shù)據(jù)字典apply_info,將每個(gè)藥品的申請(qǐng)人按科室填入對(duì)應(yīng)單元格中,具體實(shí)現(xiàn)如下:
在實(shí)際場(chǎng)景中,會(huì)出現(xiàn)不斷有科室提交新增申請(qǐng)數(shù)據(jù)的情況,為避免低效地全量生成,可以通過(guò)增量添加的方式進(jìn)行更新,同時(shí)可以對(duì)有更新的單元格添加標(biāo)記,便于核對(duì),具體實(shí)現(xiàn)如下(僅展示部分關(guān)鍵代碼):
本文以解決實(shí)際工作中醫(yī)師腫瘤藥品權(quán)限申請(qǐng)匯總場(chǎng)景為例,介紹了xlwings 在批量Excel 文件數(shù)據(jù)加工中的應(yīng)用。借助xlwings 我們可以高效地實(shí)現(xiàn)對(duì)批量Excel 文件的信息讀取,經(jīng)數(shù)據(jù)加工后,不僅可以輸出為目標(biāo)結(jié)果,而且可以有針對(duì)性地對(duì)特定的行、列、單元格等設(shè)置樣式,以達(dá)到標(biāo)識(shí)或美化報(bào)表的目的。本文僅用到xlwings 的基礎(chǔ)功能,例如與Matplotlib 結(jié)合使用生成Excel 圖表、使用純Python 代碼替換VBA編寫(xiě)Excel 宏和用戶定義函數(shù)(僅限Windows)等更為強(qiáng)大的進(jìn)階功能,可進(jìn)一步提高Excel 辦公自動(dòng)化效率,有興趣的讀者可根據(jù)實(shí)際需求進(jìn)行嘗試應(yīng)用。