上一篇〈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。加公式、上色、畫圖表只係開始——你仲可以自動隱藏欄、合併儲存格、設列寬,甚至一次過生成十幾份唔同部門嘅報表。