Google Sheets
Google Sheets 內建的 GOOGLEFINANCE 可用於簡單換算,但問題在於資料來源:它是不具名的市場綜合報價,既無法檢視來源組成,也無法指定機構。Frankfurter 彙整可查驗的中央銀行匯率;當法規要求精確來源時,你可以鎖定單一官方機構,例如歐盟營業稅(VAT)使用的歐洲央行參考匯率、波蘭 NBP 或巴西 PTAX。鎖定資料來源後,歷史匯率會保持原發布數值不變。以下公式可直接取代任何原本使用 GOOGLEFINANCE 的位置。
快速開始
免設定、無須 API 金鑰。使用 IMPORTDATA 搭配 CSV 端點即可將即時匯率載入儲存格:
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur") 試算表會填入精簡的 date,base,quote,rate 表格。date 欄位預設會顯示為序列值,選取該欄後點選格式 > 數值 > 日期即可恢復日期顯示。以逗號分隔多個幣別即可一次查詢多組匯率:
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur,gbp,jpy")換算金額
IMPORTDATA 回傳的是匯率而非換算後總額。請將金額乘上匯入的匯率儲存格,或使用下方的自訂函式以單一公式完成換算。
自訂函式
若想建立可重複使用的 =FRANKFURTER() 函式,請加入一小段 Apps Script。在試算表中開啟擴充功能 > Apps Script,貼上以下程式碼並儲存:
/**
* Converts an amount between currencies, at today's rate or on a date.
* @customfunction
*/
function FRANKFURTER(amount, from, to, date) {
let url = `https://api.frankfurter.dev/v2/rate/${from}/${to}`;
if (date) {
const tz = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
url += `?date=${Utilities.formatDate(date, tz, "yyyy-MM-dd")}`;
}
const data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
return amount * data.rate;
}接著即可在任意儲存格呼叫:
=FRANKFURTER(100, "usd", "eur")傳入日期即可查詢歷史匯率:
=FRANKFURTER(100, "usd", "eur", DATE(2020, 1, 2))鎖定官方資料來源
預設會回傳彙整所有來源的綜合匯率。加上 providers 即可鎖定單一官方機構。這對稅務與會計至關重要,許多國家規定外幣換算必須採用本國中央銀行公布的官方匯率。
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur&providers=ecb")ECB- 歐洲中央銀行參考匯率,歐盟營業稅(VAT)與海關標準。
NBP- 波蘭國家銀行,波蘭 VAT 與企業所得稅(CIT)法定換算匯率。
CNB- 捷克國家銀行定盤價,用於捷克會計與稅務申報。
BCB- 巴西中央銀行 PTAX,巴西合約與稅務參考匯率。
BANXICO- 墨西哥銀行 FIX 匯率,用於結算美元計價債務。
瀏覽所有資料來源。鎖定單一來源時會依該機構自身的發布時間表更新,因此最新匯率可能比綜合匯率晚一天。
歷史時間序列
使用 from 指定起始日期,並搭配 group=month 將資料彙整為每月一列,即可直接繪製圖表。綜合歷史匯率可能隨新資料匯入而微幅變動,若數字必須固定不變,請鎖定單一資料來源。
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd"es=gbp&providers=bbk&group=month") 上述查詢會從德國聯邦銀行(Deutsche Bundesbank)歷史檔案取得自 1949 年以來的美元兌英鎊匯率,你可以清楚看到 2.80 美元釘住匯率維持多年後於 1967 年脫鉤的過程。早期深度歷史資料來自德國聯邦銀行的法蘭克福定盤紀錄:美元兌馬克始於 1948 年,其餘多數美元交叉匯率涵蓋 1949 至 1970 年。1999 年起由歐洲中央銀行接手,因此連續的現代時間序列可使用預設綜合匯率或 providers=ecb。