Excel 進階自動化:用 Python 自動加公式、上色、出圖表

上一篇〈Excel 自動化:用 Python 五分鐘搞掂月結報表〉教咗大家用 pandas 做加總、分組、出總結。不過有唔少讀者問:數字係計到,但份報表要加公式、調顏色、畫圖表,先至見得人,呢啲「門面功夫」有冇得自動化?

有!今次我哋轉用另一個 Python 套件 openpyxl,專係處理 Excel 檔案嘅版面同格式。裝一次,之後每次行一條 script,就自動幫你加公式、上色、出圖表,成份靚靚報表一鍵搞掂。

第一步:安裝 openpyxl

打開命令提示字元,打:

pip install openpyxl

裝完就可以開始寫。

第二步:我哋要做啲咩?

假設你有一份銷售記錄,入面有「產品、數量、單價」三欄。我哋想自動:

  • 幫「總額」一欄自動填入公式(數量 × 單價)
  • 幫標題列上色,橙色底白字
  • 最底加一行「合計」,用 SUM 公式自動加總
  • 自動生成一張長條圖,一眼睇到邊款產品最好賣

第三步:完整程式碼

開一個新檔案 excel_report.py,貼入:

from openpyxl import Workbook from openpyxl.styles import Font, PatternFill from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active ws.title = "銷售報表" # 1. 標題列 ws.append(["產品", "數量", "單價", "總額"]) for col in range(1, 5): c = ws.cell(row=1, column=col) c.font = Font(bold=True, color="FFFFFF") c.fill = PatternFill("solid", fgColor="F7941D") # 2. 資料列 data = [ ("咖啡機", 12, 899), ("保溫杯", 40, 128), ("手提風扇", 25, 68), ("藍牙喇叭", 8, 399), ] for row in data: ws.append(row) # 3. 加公式:總額 = 數量 × 單價 for r in range(2, 6): ws.cell(row=r, column=4).value = f"=B{r}*C{r}" # 4. 合計列 ws.append(["合計", None, None, "=SUM(D2:D5)"]) ws.cell(row=6, column=4).font = Font(bold=True) # 5. 長條圖 chart = BarChart() chart.add_data(Reference(ws, min_col=4, min_row=1, max_row=5), titles_from_data=True) chart.set_categories(Reference(ws, min_col=1, min_row=2, max_row=5)) ws.add_chart(chart, "F2") # 6. 儲存 wb.save("sales_report.xlsx") print("報表已生成:sales_report.xlsx")

逐行解釋

  • Workbook() —— 開一份新 Excel 檔案,wb.active 係第一張工作表。
  • ws.append([...]) —— 一行一行咁加資料,最方便。
  • Font(bold=True, color="FFFFFF") + PatternFill("solid", fgColor="F7941D") —— 設字體同底色,橙色係我哋品牌色(可自行改)。
  • f"=B{r}*C{r}" —— 呢個係重點:直接將 Excel 公式寫入儲存格,Excel 會自己識計,唔使你人手計好先入。
  • BarChart() —— 建立長條圖,add_data 指定數據、set_categories 指定 X 軸類別。
  • wb.save(...) —— 儲存檔案,大功告成。

第四步:執行

命令提示字元度打:

python excel_report.py

一份有公式、有顏色、有圖表嘅 sales_report.xlsx 就生成咗。以後每個月只要改一改資料,行一次 script,成份報表自動靚晒。

總結

openpyxl 最強嘅地方,係可以將「人手慢慢執」嘅 Excel 格式工作全部交俾 Python。加公式、上色、畫圖表只係開始——你仲可以自動隱藏欄、合併儲存格、設列寬,甚至一次過生成十幾份唔同部門嘅報表。