攞一個免費 API key 喺 exchangerate.dev/signup 註冊。確認電郵之後,儀表板會顯示一個以 exr_live_ 開頭嘅 key。複製佢 — 下一步就會貼落 Apps Script。免費方案每月 10,000 次呼叫,唔使信用卡。
喺你張試算表開 Apps Script 開啟任何一張 Google 試算表。喺選單撳 擴充功能 → Apps Script 。會開一個新分頁,入面有預設嘅 function myFunction() {}。刪走佢啲內容 — 下一步會換走。
貼上 FXRATE 函數 將編輯器嘅內容換成呢條函數。佢會呼叫 exchangerate.dev,用 CacheService 將每個貨幣對快取十分鐘,遇到你會撞到嘅兩個錯誤(401 同 429)就返回一個易讀嘅標記。
Code.gs copy
// google-sheets: Apps Script Code.gs
// Replace API_KEY with your exchangerate.dev key from /signup
const API_KEY = 'exr_live_replace_with_your_key_here';
const CACHE_TTL = 600; // seconds — FX moves slower than equities; 10 min is plenty
function FXRATE(from, to) {
from = (from || 'USD').toString().toUpperCase();
to = (to || 'EUR').toString().toUpperCase();
const cacheKey = `fx_${from}_${to}`;
const cache = CacheService.getScriptCache();
const cached = cache.get(cacheKey);
if (cached) return Number(cached);
const url = `https://api.exchangerate.dev/v1/latest/${from}?symbols=${to}`;
const resp = UrlFetchApp.fetch(url, {
headers: { Authorization: `Bearer ${API_KEY}` },
muteHttpExceptions: true,
});
const code = resp.getResponseCode();
if (code === 401) return '#AUTH_ERROR';
if (code === 429) return '#RATE_LIMIT';
if (code !== 200) return '#ERROR';
const data = JSON.parse(resp.getContentText());
const rate = data.rates && data.rates[to];
if (rate == null) return '#NO_PAIR'; // unknown currency code
cache.put(cacheKey, String(rate), CACHE_TTL);
return Number(rate); // coerce so cells sum and sort
} 喺任何儲存格用 =FXRATE() 返返去張試算表,喺一個空白儲存格打 =FXRATE("USD","EUR")。大約一秒之後,儲存格就會顯示當前匯率。同一條函數適用於任何支援嘅貨幣對 — 換咗兩個貨幣代碼就得:
Sheets formula · pairs copy
// Euro per US dollar
=FXRATE("USD", "EUR") // 0.9245
// Japanese yen per US dollar
=FXRATE("USD", "JPY") // 157.32
// British pound per euro
=FXRATE("EUR", "GBP") // 0.8531
// Indonesian rupiah per US dollar
=FXRATE("USD", "IDR") // 16285.0 底層每次呼叫都會返回基準貨幣、你篩選咗嘅貨幣對,同兩個新鮮度欄位 — source 同 market_session — 所以你永遠知道個數字有幾新:
GET /v1/latest/USD?symbols=JPY copy
{
"result": "success",
"base": "USD",
"source": "live",
"market_session": "open",
"timestamp": "2026-06-29T09:14:02Z",
"data_updated_at": "2026-06-29T09:14:00Z",
"rates": { "JPY": 157.32 },
"sources": { "JPY": "live" },
"notice": "Indicative rates, not for settlement."
} 用緊 AI 助手砌呢個?
exchangerate.dev 發佈咗 MCP 伺服器同 llms.txt,所以 Claude、Cursor 或者 ChatGPT 可以讀到即時 schema 幫你寫呢條函數。你可以咁叫佢:「砌一個叫 FXRATE 嘅 Google Sheets 自訂函數,收 from 同 to 貨幣,返回 exchangerate.dev 嘅即時匯率,快取十分鐘」。詳情睇 MCP 指南 。 更新頻率同免費方案嘅配合 Apps Script 唔會自己用計時器重新執行自訂函數。想定期更新就加一個時間驅動觸發器:喺 Apps Script 左邊嘅欄撳 觸發條件 → 新增觸發條件 ,揀 FXRATE,來源揀 時間驅動 ,再揀 分鐘計時器 。十分鐘快取加上寬鬆嘅配額,就算好繁忙嘅試算表都夠用:
每月 10,000 次呼叫、每分鐘 12 次請求、唔使信用卡 CacheService 會喺 10 分鐘內返回快取匯率,所以不停編輯都唔會用額外配額 如果一張有好多貨幣對嘅試算表快要掂到每分鐘上限,就調高 CACHE_TTL涵蓋 /v1/latest、 /v1/convert、 /v1/range 同 /v1/{date}/{base}代碼 症狀 解決方法
401 儲存格顯示 #AUTH_ERRORKey 缺咗或者無效。喺儀表板重新複製,貼返落 Code.gs 最上面嘅 API_KEY。
429 儲存格顯示 #RATE_LIMIT超過咗每分鐘上限。正常情況快取會擋住;調高 CACHE_TTL,或者去 /pricing 升級。 — 儲存格顯示 #NO_PAIR回應入面冇報價貨幣。檢查下個代碼係咪支援嘅 ISO 貨幣(例如 JPY,唔係 JYP)。
— 儲存格卡喺 Loading…Apps Script 需要外部連線授權。喺編輯器工具列執行一次條函數,等提示彈出,然後接受。
指示性匯率,唔可以用嚟結算
呢啲匯率係為模型、分析同顯示而發佈。佢哋唔係交易報價 — 唔可以用嚟結算交易或者轉賬。每個回應嘅 notice 欄位都有講明。