top of page
  • 作家相片任性分析師 GT

用 Python 編輯 Excel,寫入資料和畫圖表都超好上手的 XlsxWriter 套件|教學

已更新:2023年4月29日


bianalyst gt 商業分析師的隨筆記 商業分析 數據分析 python pandas excel xlsxwriter

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


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


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


 

使用套件


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


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



import pandas as pd
import xlsxwriter

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



# writer = pd.ExcelWriter('檔名', engine = 'xlsxwriter')

writer = pd.ExcelWriter('Excel_file.xlsx', engine = 'xlsxwriter')


dataframe.to_excel(writer, sheet_name = 'top_10') # sheet_name 可自行命名

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']

bar_chart = workbook.add_chart({'type': 'column'}) 
# 'type': 'column' 即為圖表類別為 bar chart

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,以了解更彈性、更貼近實務面的寫法:

  1. 如何在同份 Excel file 寫入多個 sheets

  2. 如何在同份 Excel file 的同個 sheet 擺放多個 DataFrames

  3. 如何設定我的資料表或圖表要放哪裡

  4. 如何繪製組合圖

結語


自動化與 Python 系列算是最近正好工作遇到,自己研究之後很感興趣的內容,希望能夠對大家有點幫助!也很歡迎各路達人分享自己在自動化或是資料分析遇到的情境,讓我可以有下個主題可以寫 XD


另,xlsxwriter 還能夠做很多變化,包含調字型、底色…等,這邊也不一一贅述,請好奇心還沒被滿足的朋友們點進 docs 來深入研究。


bottom of page