本日主題:學會判斷「什麼該自動化、怎麼下手」 預計時間:1.5 小時 對應主教材:第 6.4 節


一、今日學習目標

  • [ ] 會用三個問題判斷是否值得自動化
  • [ ] 能規劃自動化的步驟
  • [ ] 累積可在面試講的自動化點子
  • [ ] 學會用 smtplib 寄送自動通知信
  • [ ] 學會用 requests 串接 API
  • [ ] 了解 Windows 工作排程器設定腳本的步驟

二、教材內容

2.1 自動化三問

判斷一件事值不值得自動化,問三個問題: 1. 重複性高嗎?(每天/每週都要做) 2. 規則明確嗎?(步驟固定,不太需要人判斷) 3. 出錯成本高嗎?(人工容易漏、容易錯)

三個都「是」→ 最值得自動化。只偶爾做一次、規則很模糊的,先別急著自動化。

量化評估:值不值得花時間自動化?

自動化節省的時間 = 每次手動花的時間 × 每月執行次數 × 12 個月
開發自動化花的時間 = 預估開發時數 + 維護時數

若「節省時間 > 開發時間 × 2」→ 值得自動化

例如:每天手動整理報表要 30 分鐘,一年就是 30 × 250 = 7,500 分鐘(125 小時)。花 4 小時寫自動化腳本,投報率非常高。

2.2 常見可自動化的題材

情境 自動化方式 預估節省時間
每天彙整多份報表 Python/pandas 讀檔彙總、排程執行 30 分/天
定期備份檔案 腳本 + 排程(Windows 工作排程器 / cron) 15 分/次
新人帳號批次建立 PowerShell + AD 模組 20 分/人
表單簽核 Power Apps + Power Automate 減少紙本流程
定期寄送提醒/通知 腳本 + 郵件 API 10 分/次
從系統匯出資料做分析 SQL 查詢 + Excel/Power BI 1 小時/週
定期檢查伺服器狀態 Python + requests + 排程 自動預警
設備到保固期前提醒 Python 比對日期 + 自動寄信 避免遺漏

2.3 自動化的步驟(先標準化再自動化)

1. 觀察現況:把目前手動步驟一條條寫下來
2. 標準化:確認步驟固定、寫成 SOP
3. 找工具:選最合適、自己會的工具
4. 做小範圍試做:先自動化一小段,驗證可行
5. 全面導入 + 監控:確認穩定,留錯誤通知
6. 持續改善:依使用回饋優化

關鍵心法:不能標準化的流程,先別自動化。先把流程理清楚(呼應第 5 週的流程改善)。

2.4 怎麼在面試講自動化(加分公式)

我發現 ___(重複性工作)每次要花 ___ 時間、又容易出錯,
我用 ___(工具)把它自動化,
現在 ___(縮短到多少 / 不再出錯 / 省下人力)。

2.5 Python smtplib 自動寄信範例

在自動化流程中,「通知」是常見的最後一步。完成報表後自動寄信給主管,是非常實用的功能。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def send_report_email(receiver, subject, body, attachment_path=None):
    """自動寄送報表通知信"""
    sender = "your_email@gmail.com"
    password = "your_app_password"  # Gmail 需用「應用程式密碼」

    msg = MIMEMultipart()
    msg["From"] = sender
    msg["To"] = receiver
    msg["Subject"] = subject
    msg.attach(MIMEText(body, "plain", "utf-8"))

    # 附加檔案(選用)
    if attachment_path:
        with open(attachment_path, "rb") as f:
            part = MIMEBase("application", "octet-stream")
            part.set_payload(f.read())
            encoders.encode_base64(part)
            part.add_header(
                "Content-Disposition",
                f"attachment; filename={attachment_path.split('/')[-1]}"
            )
            msg.attach(part)

    # 連線 SMTP 伺服器並寄信
    with smtplib.SMTP("smtp.gmail.com", 587) as server:
        server.starttls()
        server.login(sender, password)
        server.send_message(msg)

    print(f"信件已寄出給 {receiver}")

# 使用範例
send_report_email(
    receiver="manager@company.com",
    subject="每日彙總報表 — 2024/01/15",
    body="主管您好,\n\n今日彙總報表已產生,請參閱附件。\n\nIT 部門",
    attachment_path="彙總報表_20240115.xlsx"
)

注意:Gmail 需要開啟「兩步驟驗證」並產生「應用程式密碼」。公司信箱則使用公司 SMTP 伺服器設定。

2.6 Python requests 串接 API 基本範例

API(Application Programming Interface)是系統之間溝通的橋樑。用 Python 的 requests 套件可以輕鬆呼叫各種 API。

pip install requests
import requests

# --- GET 請求:取得資料 ---
response = requests.get("https://api.github.com/users/octocat")

if response.status_code == 200:
    data = response.json()
    print(f"使用者:{data['login']}")
    print(f"公開 Repo 數:{data['public_repos']}")
else:
    print(f"請求失敗,狀態碼:{response.status_code}")

# --- POST 請求:送出資料 ---
payload = {
    "title": "伺服器異常通知",
    "body": "DC01 於 14:30 無回應,已重啟。",
}
response = requests.post(
    "https://api.example.com/notifications",
    json=payload,
    headers={"Authorization": "Bearer YOUR_TOKEN"}
)

# --- 實用範例:查匯率 ---
def get_exchange_rate():
    url = "https://open.er-api.com/v6/latest/USD"
    resp = requests.get(url)
    if resp.status_code == 200:
        rates = resp.json()["rates"]
        print(f"1 USD = {rates['TWD']} TWD")
    else:
        print("查詢失敗")

get_exchange_rate()

面試加分小知識:「我會用 Python requests 串 API,例如從 ERP 匯出資料做報表」——這代表你不只會做單機作業,還能做系統間的串接。

2.7 Windows 工作排程器設定 Python 腳本

讓你的 Python 腳本每天自動執行:

設定步驟

1. 打開「工作排程器」(搜尋 Task Scheduler)
2. 點「建立基本工作」
3. 名稱:「每日報表彙總」
4. 觸發程序:每天,設定時間(例如每天 08:00)
5. 動作:「啟動程式」
6. 程式或指令碼:C:\Python39\python.exe
   (填你的 Python 完整路徑)
7. 新增引數:C:\Users\你\Documents\report.py
   (填你的腳本完整路徑)
8. 開始位置:C:\Users\你\Documents\
   (填腳本所在資料夾)
9. 完成

進階設定

  • 不論使用者是否登入都執行:確保不開電腦也會跑(需要伺服器環境)
  • 以最高權限執行:如果腳本需要存取受保護的資源
  • 錯誤重試:設定失敗後重試次數

常見問題排除

問題 解決方式
排程沒執行 確認「啟用」勾選;確認電腦沒有關機/休眠
執行但沒產出 確認「開始位置」設正確(相對路徑才能正確找到檔案)
找不到 Python 填 Python 的完整路徑,不要只寫 python
缺套件錯誤 確認排程用的 Python 環境有裝需要的套件

三、今日練習

任務. 列出 3 個你生活或打工/社團中「重複、規則明確」的工作,並針對其中 1 個寫出自動化的步驟與選用工具。

Q1. 自動化三問是哪三個?

Q2. 為什麼「不能標準化的流程先別自動化」?

Q3. 用 Python smtplib 寄信時,需要哪些基本資訊?

Q4. requests.get() 跟 requests.post() 的差別是什麼?

Q5. 在 Windows 工作排程器中設定 Python 腳本,「程式或指令碼」和「新增引數」分別要填什麼?

參考解答 **A1.** 重複性高嗎?規則明確嗎?出錯成本高嗎? **A2.** 因為自動化是把固定規則交給程式;流程若還很混亂、常變動,自動化反而會把錯誤放大、難維護,應先標準化(SOP)再自動化。 **A3.** 需要: 1. 寄件人 Email 地址與密碼(或應用程式密碼) 2. SMTP 伺服器位址與連接埠(如 Gmail 是 smtp.gmail.com:587) 3. 收件人 Email 地址 4. 信件主旨與內文 **A4.** - `GET`:向伺服器「取得」資料,不會改變伺服器上的資料。例如查詢匯率、取得使用者資訊。 - `POST`:向伺服器「送出/新增」資料,通常會在伺服器端產生新的紀錄。例如送出表單、建立新的通知。 - 對應到 CRUD:GET ≈ Read,POST ≈ Create。 **A5.** - 「程式或指令碼」:填 Python 執行檔的**完整路徑**,例如 `C:\Python39\python.exe` - 「新增引數」:填要執行的 Python 腳本**完整路徑**,例如 `C:\Scripts\daily_report.py` - 還建議設定「開始位置」為腳本所在資料夾,確保相對路徑能正確運作。

四、常見誤解

誤解 正確觀念
「所有事情都該自動化」 只偶爾做一次、或規則常變的工作,自動化的維護成本可能比手動還高
「自動化一定要很複雜」 有時候一個 10 行的腳本就能省大量時間
「自動化做好就不用管了」 需要監控與維護,資料格式、來源變了就要調整
「先寫程式再想流程」 應該先把流程標準化(SOP),再把 SOP 翻譯成程式

五、今日檢核

  • [ ] 我會用三問判斷是否該自動化
  • [ ] 我能規劃自動化步驟
  • [ ] 我準備了可在面試講的自動化點子
  • [ ] 我了解 smtplib 自動寄信的流程
  • [ ] 我了解 requests 串 API 的基本方式
  • [ ] 我知道如何用 Windows 工作排程器排程 Python 腳本

六、延伸閱讀


⬅️ 上一天:Day 2 | 🏠 本週總覽 | ➡️ 下一天:Day 4 — 自動化作品(上)