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