本日主題:學會判斷「什麼該自動化、怎麼下手」 預計時間: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 腳本
六、延伸閱讀
- Python smtplib 官方文件
- Requests: HTTP for Humans
- Windows 工作排程器使用教學
- Automate the Boring Stuff with Python(免費線上書)
⬅️ 上一天:Day 2 | 🏠 本週總覽 | ➡️ 下一天:Day 4 — 自動化作品(上)