iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

昨天提到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截圖,預算能加總,每項都有自己的位子了,能完成最初的期望
https://ithelp.ithome.com.tw/upload/images/20251010/20168983F7Fm7uwB4i.png

以下是Gemini的vibe coding 版本供大家參考、討論、取笑

#=== 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 行程表了!

上一篇
什麼是vibe coding
下一篇
GitHub是什麼?
系列文
利用生成式AI連結生活,完成自我挑戰27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言