2026年11月9日 星期一

VibeCoding Python處理EXCEL自動化應用2006課程總結

 


簡報:
















影片:

AI 時代的 Python 自動化實戰:5 個翻轉程式思維的核心心法與避坑指南

在 GitHub Copilot、ChatGPT 等生成式 AI 工具普及的今天,許多程式學習者與職場人士心中都不免浮現一個疑問:「既然 AI 能在幾秒鐘內幫我寫出完整的 Python 程式碼,我們真的還需要扎扎實實地學習寫程式嗎?」

生成式 AI 的確大幅降低了自動化的門檻,但「能生成程式碼」與「能順利執行並解決職場實務問題」之間,往往存在著一道巨大的溝通與除錯落差。本文專為希望利用 Python 進行職場數據自動化的從業人員與開發者,從「吳老師教學部落格」一系列豐富的實戰教學經驗中,提煉出 5 個最具衝擊力與實務價值的 Python + AI 自動化關鍵觀念與避坑指南。

第一大 takeaway:盲目依賴 AI 的隱形危機 —— 為什麼你仍需扎實的 Python 基本功?

面對常見的自動化需求,不論是計算 1 到 99 的奇數加總、撰寫九九乘法表,還是開發猜數字遊戲,AI 助手都能秒速吐出對應的程式碼。然而,若使用者抱持著「閉著眼睛過關」的心態,將面臨極大的實力斷層與維護風險。

以基礎迴圈為例,當我們請 AI 撰寫奇數加總時,它通常會生成如 for i in range(1, 100, 2): 的語法。若缺乏基礎語法概念,你可能無法理解 range() 函式內的三個參數結構(start=1 起始值、stop=100 終止範圍、step=2 遞增步長,代表每次跳兩號以精準篩出奇數)。

此外,AI 在撰寫互動式程式(如猜數字遊戲)時,常會主動加入 try-except 異常處理區塊,用以防範使用者輸入非數字字元(如字母或符號)導致程式崩潰。若不具備基礎防呆觀念,一旦程式邏輯出錯或需要調整猜測範圍,你將完全無法閱讀與除錯。

「如果哪一天突然網路大當機和斷線的話,哇那我看很多工作都沒辦法做……最好還是要有一個如果哪一天 AI 不能用、有別的方法可以解決的基本功。」

解析與反思: AI 是最強大且貼心的「程式輔助工具」,但絕無法替代人類大腦的邏輯思考與架構判定。要能順利調校 AI 給出的成果,你依然必須看懂:

  • 變數宣告與累加邏輯:如 ans = ans + i 或 ans += i 的數值更新機制。
  • 迴圈控制結構:明確區分範圍固定的 for 迴圈,與條件判斷導向的 while 無窮迴圈搭配 break 強制中斷機制。
  • 例外處理(Exception Handling):理解 try-except 區塊如何捕捉 ValueError,避免程式異常中斷。
  • 字串格式化:掌握 f"{var}" 或 .format() 在資料輸出時的應用。
  • 縮排(Indentation):Python 對縮排(Tab / 空格)極為敏感,程式碼區塊放在迴圈之內或之外,將執行出截然不同的結果。

懂基本功,你才能在 AI 給出不良程式碼或網路斷線時,扮演精準的監督者與最終修補者。

第二大 takeaway:精準控制 AI 不鬼打牆 —— 提示詞(Prompts)寫作的關鍵心法

許多人在請 AI 撰寫網路爬蟲或數據處理程式時,常遇到 AI 生成的程式碼無法運作、甚至與需求大相逕庭的狀況。這往往不是 AI 不夠聰明,而是使用者提供的「提示詞(Prompts)」過於模糊。欲掌握精準控制 AI 的心法,需運用以下兩大核心技巧:

1. 提供具體的 HTML 標籤與類別(Class)名稱

請不要只對 AI 下達「幫我抓網頁上的表格」這類模糊指令。建議先按下 F12 開啟瀏覽器的開發者工具(檢查元素),並善用 Ctrl + F 尋找功能,驗證特徵標籤的數量與唯一性。

  • 實務範例:在擷取 TQC 證照網頁資料時,先透過 Ctrl + F 搜尋 <h4 標籤或 div 類別名稱(如 class="AutoStyle1"),確認數量剛好精準對應 79 項證照資料。
  • 提示詞下達:明確告知 AI:「請使用 BeautifulSoup 抓取 div 標籤且 class="AutoStyle1" 下的 table 表格,並依序解析 tr 列與 td 儲存格內容。」

給予經過驗證的 HTML 標籤與 Class 名稱,AI 就能精準定位 DOM 結構,避免程式碼盲目搜尋無效節點。

2. 善用「例如 (Example)」給予明確示範

描述邏輯轉換或格式化需求時,文字說明再多,都不如直接給予輸入與輸出的範例來得精確。

  • 實務範例:在要求修正日期欄位時,文字敘述常會引發 AI 的理解偏差。直接提供示範提示:「請將資料庫擷取出的日期字串轉換為標準斜線格式,例如:將 20241025 改為 2024/10/25」。

結論:提供具體標籤特徵與範例示範,能讓 AI 瞬間理解商業邏輯與資料結構,大幅降低產生幻覺(Hallucination)或鬼打牆除錯的機率,節省寶貴的 API Token 與溝通時間。

第三大 takeaway:數據處理的隱形陷阱 —— 搞定中文亂碼 (CP950 vs. UTF-8) 與 Excel 數字型態

在邁向自動化的過程中,最常讓新手卡關的往往不是複雜的演算法,而是檔案編碼與資料型態兩大隱形陷阱。

數據處理常見陷阱對照表

潛在陷阱類別

常見發生情境 / 系統環境

導致後果與視覺異常

正確解法與提示詞策略

檔案編碼陷阱 (Encoding)

Windows 微軟環境慣用 CP950 / Big5 / ANSI;網頁與跨平台開放資料慣用 UTF-8。

使用錯誤編碼開啟 CSV 或 TXT 時,終端機回報解碼錯誤或顯示盲字亂碼。

讀寫檔案時明確指定編碼,如 open(..., encoding='cp950') 或 pd.read_csv(..., encoding='utf-8')。

Excel 型態陷阱 (Data Types)

從網頁爬取的匯率、案件數或連續數字日期(如 20241025)預設皆為字串 (str)。

寫入 Excel 後儲存格靠左對齊,文字左上角出現綠色警示三角標籤;無法進行樞紐分析與公式累加。

在寫入 Excel 前,透過 float() 或 int() 強制轉型,並將日期轉換為 YYYY/MM/DD 標準格式。

陷阱深入解析與圖表失敗根源

爬蟲抓取下來的數據(如連續數字日期 20241025 或匯率字串 "32.5"),若直接寫入 Excel 活頁簿,Excel 會將其視為「純文字」或「普通大整數」。這會導致兩大問題:

  1. 樞紐分析與加總失效:Excel 公式無法對文字型態的數字進行加總或計算平均值。
  2. 折線圖時間軸斷裂:在使用 Matplotlib 或 Excel 原生繪圖時,文字型態的日期會被視為獨立的「類別標籤(Categorical Data)」而非連續的「時間序列(Time Series)」,導致折線圖 X 軸無法呈現連續的時間變化趨勢。

避坑處置:提示 AI 在處理資料時,必須先呼叫 int() 或 float() 完成數值轉換,並將日期格式化為標準斜線字串(如 2024/10/25)。同時,可在程式最後加入調整「最適欄寬 (Auto-fit column width)」的邏輯,大幅提升產出報表的可讀性與專業度。

第四大 takeaway:突破網站反防禦機制 —— 偽裝 Headers 與處理大量分頁爬蟲

進行大規模數據採集(例如採集台北市住宅竊盜點位資料、金管會每日匯率、或樂透雲 1 到 109 頁的歷年數據)時,常會遇到目標網站伺服器封鎖爬蟲、回報 HTTP 403 錯誤的情況。

1. 偽裝請求標頭 (Headers / User-Agent)

許多伺服器會阻擋來自 Python requests 預設 User-Agent 特徵(如 python-requests/x.x.x)的存取。AI 會在發出 HTTP 請求時,自動在 headers 字典中加入常規瀏覽器的 User-Agent 參數:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)

將爬蟲請求偽裝成一般 Chrome 或 Edge 瀏覽器的行為,即可輕鬆避開伺服器的反防禦機制。

2. 動態拆解 GET 網址參數與多頁標頭去重邏輯

面對跨多頁的資料擷取需求,不需要手動複製數百個網址。觀察網址結構中的 GET 參數(例如 indexpage=1 至 indexpage=109),可透過 for page in range(1, 110): 建立動態迴圈。

多頁合併寫入與去標頭關鍵邏輯:

  • 第 1 頁 (page == 1):保留完整的 HTML 表格標頭列(tr / Table Header)與資料內文,寫入主資料串列中。
  • 第 2 頁起 (page >= 2):解析 HTML 表格後,必須進行切片切割(Slice),自動濾除第一列表頭,僅擷取純數據區域並追加(Append)至主資料中。

這樣處理能避免第二頁以後的標頭重複出現在資料集中,確保最終合併出的資料庫乾淨無瑕。

第五大 takeaway:從 raw data 到全自動化儀表板 —— Python 結合 Excel 與圖表的強大生態系

資料採集與清理完成後,最終目標是呈現直觀的數據視覺化儀表板。Python 生態系提供了兩大熱門模組來操作 Excel,技術選型切合實際業務情境至關重要。

openpyxl vs. pandas 技術選型策略指南

比較維度

pandas 模組

openpyxl 模組

核心優勢

數據處理速度極快、語法精簡,擅長大規模資料清理與統計分析。

完美控制 Excel 活頁簿物件、工作表(Worksheets)與指定儲存格座標(如 A1)。

操作模式

以「讀取-處理-覆寫」(如 pd.read_csv() 搭配 df.to_excel())為主。

以「物件導向操作」為主,可逐列逐格存取與設定格式。

格式與樣式

輸出時會清除原有 Excel 儲存格的顏色、字型與框線樣式。

精準保留並可設定儲存格顏色、字型、公式、欄寬與邊框。

原生圖表

不支援直接在 Excel 內建立原生 Excel 互動圖表物件。

支援插入原生 Excel 圖表,並可指定圖表左上角精確對齊座標(如 A1 或 F1)。

最佳適用場景

大量 CSV / Excel 數據清理、樞紐分析與純資料轉檔作業。

需要保留既有報表樣式、精細排版、寫入公式並置入繪圖物件的自動化報表。

解決 Matplotlib 中文繪圖亂碼

使用 Python Matplotlib 模組繪製視覺化圖表時,預設字型經常無法渲染中文,導致圖表標題與軸線標籤出現方塊亂碼(□□□)。解法為在程式開頭強制設定繁體中文字型:

import matplotlib.pyplot as plt

# 指定系統內建之微軟正黑體,防止中文顯示為方塊亂碼
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
plt.rcParams['axes.unicode_minus'] = False

在將圖表插入 Excel 時,必須明確指定錨點儲存格座標(如指定左上角定位於 A1 或 F1),確保圖表排版美觀不重疊。

一鍵打包與 GUI 介面部署

寫好的 Python 自動化腳本(.py)若要交由非技術人員使用,可提示 AI 利用 PyInstaller 套件進行打包:

  1. 執行命令後,PyInstaller 會將 Python 環境與相依套件編譯為獨立的可執行檔。
  2. 編譯完成的 .exe 檔將自動生成於專案目錄下的 dist/ 子資料夾中(例如 dist/猜數字遊戲.exe)。
  3. 搭配 Tkinter 模組加上視窗圖形化介面(GUI),讓非技術同事雙擊執行檔即可透過按鈕一鍵完成數據處理。

結語與前瞻反思

生成式 AI 的崛起,讓原本門檻極高的網路爬蟲、編碼轉碼、數據統計與視覺化儀表板開發,變得極為親民。透過清晰的提示詞引導,AI 能在數分鐘內協助我們架構出自動化程式碼的雛形。

然而,「萬丈高樓平地起,邏輯理解定勝負」。AI 固然能為我們省去繁瑣的語法撰寫時間,但資料流向的規劃、例外條件的防呆設計、編碼與型態的陷阱避坑知識,依然掌握在開發者的思維深度中。

在 AI 充斥且執行效率倍數激增的時代,你打算把節省下來的時間用於何處?是停止學習程式邏輯、完全寄人籬下;還是善用 AI 幫你搞定語法細節,將自己提升為掌控資料流與自動化架構的思維架構師?


吳老師  115/11/10

VibeCoding,ChatGPT,EXCEL,VBA,Python,自強工業基金會,函數,程式設計,線上教學,VSCODE


沒有留言: