昨天提到vibe coding,是從國中第一次學程式時知道的概念,在大學時更常被提起,適合在運用在多個場景,在這個AI大流行的時代,利用AI去做vibe coding的動作,除了直接用自然語言做提示,能透過可讀性這一重點,很好地理解程式內容,解決做這個小專題中遇到的問題時,能很好理解問題所在並加以修改。
說完以上這些,我們來解決前天遇到的問題,
下面是修改過的程式碼:
#=== 3. 儲存 Excel 並自動加總預算 ===
def save_as_excel(filename, itinerary_text):
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "行程與預算"
headers = ["時間", "活動/景點", "交通方式", "Google Maps", "預估費用 (NTD)"]
ws.append(headers)
for col in range(1, len(headers) + 1):
ws.cell(row=1, column=col).font = Font(bold=True)
ws.cell(row=1, column=col).alignment = Alignment(horizontal="center", vertical="center")
#正規表達式:匹配數字
*```
moneypattern = re.compile(r"約?\s(\d{2,6})\s(元|NTD|塊)?")
for line in itinerarytext.split("\n"):
costvalue = None
match = moneypattern.search(line)
if match:
costvalue = int(match.group(1)) # 僅取數字
if "上午" in line or "下午" in line or "晚上" in line:
ws.append([line.strip(), "", "", "", ""])
elif "https://maps.google.com" in line:
ws.append(["", "", "", line.strip(), ""])
elif "交通" in line:
ws.append(["", "", line.strip(), "", ""])
else:
if line.strip():
ws.append(["", line.strip(), "", "", costvalue if costvalue else None])***
#自動加總公式
last_row = ws.max_row + 1
ws.cell(row=last_row, column=4, value="總預算").font = Font(bold=True)
ws.cell(row=last_row, column=5, value=f"=SUM(E2:E{last_row - 1})").font = Font(bold=True)
for col in "ABCDE":
ws.column_dimensions[col].width = 20
wb.save(filename)
以下是excel截圖,預算能加總,每項都有自己的位子了,能完成最初的期望
#=== 3. 儲存 Excel 並自動加總預算 ===
# 好的,現在我們要把辛辛苦苦規劃好的行程變成一個正式的 Excel 檔案!
# 而且還要貼心地把預算自動算出來,畢竟出遊不能超支嘛!
def save_as_excel(filename, itinerary_text):
# 建立一個全新的 Excel 工作簿 (Workbook),想像成一本空白的 Excel 檔案
wb = openpyxl.Workbook()
# 拿到目前活動中的工作表 (Worksheet),預設是第一個工作表
ws = wb.active
# 給工作表一個清晰明瞭的名稱
ws.title = "行程與預算"
# 定義 Excel 表格的標題,要夠清楚、夠專業!
headers = ["時間", "活動/景點", "交通方式", "Google Maps", "預估費用 (NTD)"]
# 把標題行寫入工作表的第一行
ws.append(headers)
# 讓標題行看起來更像樣,幫它加粗、置中!
for col in range(1, len(headers) + 1):
# 設定字體為粗體 (Bold),強調標題的重要性
ws.cell(row=1, column=col).font = Font(bold=True)
# 設定對齊方式為水平和垂直都置中,美觀大方
ws.cell(row=1, column=col).alignment = Alignment(horizontal="center", vertical="center")
# 正規表達式:匹配數字 (這是我們的預算偵測器!)
# 它的目標是找到像 "約 300 元" 或 "500 NTD" 這種費用描述,把中間的數字抓出來
# r"約?\s*(\d{2,6})\s*(元|NTD|塊)?"
# '約?': 可能有 '約' 字 (可選)
# '\s*': 零個或多個空白 (可選)
# '(\d{2,6})': 核心!抓取 2 到 6 位的數字,這是我們的費用金額 (用括號包起來,稍後抓取)
# '\s*': 零個或多個空白 (可選)
# '(元|NTD|塊)?': 可能有 '元', 'NTD', 或 '塊' 等單位 (可選)
money_pattern = re.compile(r"約?\s*(\d{2,6})\s*(元|NTD|塊)?")
# 開始處理傳入的文字行程 (itinerary_text),一行一行來分析
for line in itinerary_text.split("\n"):
cost_value = None # 預設費用是空的
match = money_pattern.search(line) # 嘗試在這行文字中尋找費用
if match:
# 如果有找到費用 (match 成功了!)
cost_value = int(match.group(1)) # 僅擷取正規表達式中第一個括號 (\d{2,6}) 裡的數字,並轉成整數
# 根據行內容的關鍵字,決定這行資料要放在 Excel 的哪一欄
# 這是時間標記 (e.g., 上午、下午、晚上)
if "上午" in line or "下午" in line or "晚上" in line:
# 放在 "時間" 欄
ws.append([line.strip(), "", "", "", ""])
# 這是 Google Maps 連結 (假設連結有這個特定格式)
elif "https://maps.google.com" in line:
# 放在 "Google Maps" 欄
ws.append(["", "", "", line.strip(), ""])
# 這是交通方式
elif "交通" in line:
# 放在 "交通方式" 欄
ws.append(["", "", line.strip(), "", ""])
# 剩下的大多是活動/景點描述
else:
if line.strip(): # 確保這行不是純粹的空行
# 放在 "活動/景點" 欄
# 如果有抓到費用,就放在 "預估費用 (NTD)" 欄,不然就放 None (空值)
ws.append(["", line.strip(), "", "", cost_value if cost_value else None])
# --- 預算自動加總的魔法時刻! ---
# 決定總計要寫在哪一行 (當前最後一行 + 1)
last_row = ws.max_row + 1
# 在 "Google Maps" 欄 (第 4 欄) 寫入 "總預算",並設為粗體
ws.cell(row=last_row, column=4, value="總預算").font = Font(bold=True)
# 關鍵!在 "預估費用" 欄 (第 5 欄) 寫入 Excel 的 SUM 公式
# 公式範圍是從 E2 (第一筆費用資料) 到 E(last_row - 1) (最後一筆費用資料)
ws.cell(row=last_row, column=5, value=f"=SUM(E2:E{last_row - 1})").font = Font(bold=True)
# 調整欄寬,讓內容顯示更完整,視覺效果更好!
for col in "ABCDE":
ws.column_dimensions[col].width = 20
# 最後,把這個完美的工作簿儲存成檔案!
wb.save(filename)
# 搞定!現在我們有一個整理好、有欄位、而且會自動加總預算的 Excel 行程表了!