[分享] Python 編輯 Excel:XlsxWriter 套件教學

BooksandCareer
Views from BI & PM
Published in
5 min readJan 21, 2020
註:因涉及公司機密,部分數據已隱藏

[分享] 使用 Python 自動產出 Excel 報告(Windows 10)這篇文曾經提到,可以如何使用 Python 自動化製作 Excel 報表,當時主要重心放在「自動化」的流程與方式,這次則是要告訴大家實際用 Python 編輯 Excel 的小撇步!

(註:也剛好當工作的記錄 XD)

本文將以上面的 GIF 做為範本,以下會針對 GIF 中用到的功能一一說明。

使用套件

開始之前,先介紹我們會使用到 Python 套件:xlsxwriter & Pandas

與 smtplib 一樣,若你是 Anaconda 的使用者, Anaconda 因為已內建 xlsxwriter,所以不用另外再 pip install 套件囉!直接速速到 Jupyter notebook import 就好。

完成 import 後,寫入 Excel 的起手式通常會有這幾行 code:

# writer = pd.ExcelWriter('檔名', engine = 'xlsxwriter')
writer = pd.ExcelWriter('Excel_file.xlsx', engine = 'xlsxwriter')
# sheet_name 可自行命名
dataframe.to_excel(writer, sheet_name = 'top_10')
workbook = writer.book# 指定接下來要編輯的 sheet
worksheet = writer.sheets['top_10']
# 最後存檔,一定要加上
writer.save()

記得一定要有 save 的指令,Excel 編輯好之後才會完成儲存喔!

I、用 Python xlsxwriter 製作 Excel 圖表

首先,帶大家實作超實用的圖表功能。Python xlsxwriter 不僅可以做出折線圖、長條圖,甚至是組合圖也都能實現!

除了支援各種基本圖表,xlsxwriter 最方便的地方在於它直接可以在 Excel 裡面產出,不用另外將圖表以「插入圖片」的方式放到 Excel 檔案中!

以下為繪製長條圖的範例:

writer = pd.ExcelWriter('bar_demo.xlsx', engine = 'xlsxwriter')dataframe.to_excel(writer, sheet_name = 'top_10')workbook = writer.bookworksheet = writer.sheets['top_10']# 'type': 'column' 即為圖表類別為 bar chart
bar_chart = workbook.add_chart({'type': 'column'})

bar_chart.add_series({'name': '=top_10!$C$1',
'categories': '=top_10!$B$2:$B$8',
'values': '=top_10!$C$2:$C$8'})
# 'name': 顯示於 legend 的名稱
# 'categories': X 軸值
# 'values': 資料值
# 圖表擺放位置於 K2
worksheet.insert_chart('K2', bar_chart)
writer.save()

上面的程式碼就能產出一張長條圖,若想追加更多細節,也能透過以下這些功能修改設定:

bar_chart.set_x_axis:設定 X 軸標題

bar_chart.set_y_axis:設定 Y 軸標題

bar_chart.set_legend:設定圖例位置

bar_chart.set_size:設定圖表大小

II、用 Python xlsxwriter 設定儲存格資料格式 & 儲存格寬度

一份報表光是數字格式就有很多種,包含不想要有小數點的、想要以百分比呈現的、要加上千分位符號的,更不用說數字或文字太多,需要調整儲存格寬度的情況!

不過不用擔心,這些小細節都是可以調整的!以下就來示範該怎麼進行設定(底下的範例:百分比取小數點兩位):

writer = pd.ExcelWriter('bar_demo.xlsx', engine = 'xlsxwriter')dataframe.to_excel(writer, sheet_name = 'top_10')workbook = writer.bookworksheet = writer.sheets['top_10']# 新增百分比格式
pctg_format = workbook.add_format({'num_format': '0.00%'})
# 指定 sheet 裡的 A 欄位,整欄套用寬度 15 單位,並設定成百分比格式worksheet.set_column('A:A', 15, pctg_format)

III、進階玩法

結合上面提到的 Python xlsxwriter 畫圖、調整資料格式與設定儲存格寬度,大家也可以參考底下的 GitHub Python script,以了解更彈性、更貼近實務面的寫法:

--

--