iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0

今天想幫記帳 App 加入一個功能,「把記帳資料匯出成檔案」
這樣使用者就可以把自己的記帳紀錄保存下來,也方便之後用 Excel 查看或整理。

讓記帳資料可以匯出
我先在 App.jsx 裡建立 handleExportCSV,把目前的記帳資料轉換成 CSV 格式。
CSV其實就是一種很單純的文字表格格式,用逗號分隔欄位、換行分隔每一筆資料。

但第一次做的時候,我遇到了一個困難:
中文在 Excel 裡變成亂碼。

所以我問 AI 要怎麼樣才能不會變亂碼。
AI 告訴我可以在 CSV 開頭加入** UTF-8 BOM(\uFEFF)**,讓 Excel 能正確辨識檔案的 UTF-8 編碼:
https://ithelp.ithome.com.tw/upload/images/20260918/20183949CTiMzSH7n1.jpg
這個 \uFEFF 可以讓 Excel 更正確地辨識 UTF-8 編碼,解決繁體中文亂碼的問題。

不用後端也可以下載檔案?
除此之外,我學到了一個重要的東西:Blob
我利用瀏覽器提供的 API,把 CSV 文字包裝成檔案,再建立臨時下載連結:
https://ithelp.ithome.com.tw/upload/images/20260918/20183949H0e52kcY6h.jpg

接著建立 標籤觸發下載,下載完成後再把這個臨時 URL 釋放:
https://ithelp.ithome.com.tw/upload/images/20260918/2018394953jq90b9wZ.jpg

這讓我第一次比較完整地理解:
資料 → Blob → 臨時 URL → 觸發下載 → 釋放 URL
而且整個過程都可以直接在瀏覽器完成,不需要另外建立後端下載服務。

CSV 的一些規則
今天了解到CSV 並不是單純「看到逗號就切開」這麼簡單。
如果資料本身包含逗號或雙引號,就需要進行特殊處理。
例如欄位裡如果有雙引號,就要把 " 轉換成 "",並用雙引號包住整個欄位。

這些小細節我都沒有注意到,直到開始真的做匯出功能,才發現一個看似簡單的「下載 Excel」其實還是有不少細節。

我也把原本比較不直覺的「匯出 CSV」改成:匯出 Excel
不是所有人都知道什麼是CSV,這也讓這個app更趨向於大眾可以方便使用的網站。

今天同樣請他做題目給我想,在過程中學到 useMemo 和 useCallback 的差別:

  • useMemo → 快取計算出來的值
  • useCallback → 快取函式本身

今天的成果展示:
https://ithelp.ithome.com.tw/upload/images/20260918/20183949OZhUoo8I9s.png

總結:
今天完成了記帳資料的 CSV 匯出功能,也學到:

  • CSV 的基本格式與特殊字元處理
  • 使用 \uFEFF 解決 Excel 中文亂碼
  • 使用 Blob 和 URL.createObjectURL() 製作瀏覽器下載功能
  • 使用 URL.revokeObjectURL() 釋放臨時 URL
  • useMemo 與 useCallback 的不同用途
    原本以為匯出Excel只是一個按鈕,實際做的時候才發現從資料格式、編碼、瀏覽器 API 到 UI 排版,每一層都有需要理解的細節。

上一篇
Day 16|批次操作與介面排版優化
下一篇
Day 18|加入暗黑模式
系列文
Vibe Coding 實戰手冊:30 天打造具備預算控管與數據視覺化的 React 記帳應用18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言