تعلّم/بداية سريعة مع Google Sheets

أسعار صرف حية في Google Sheets

اربط exchangerate.dev بدالة مخصصة =FXRATE() عبر Apps Script، مع ذاكرة تخزين مؤقت ومعالجة للأخطاء. الخطة المجانية: 10,000 استدعاء شهريًا بلا بطاقة.

ERexchangerate.dev·Jun 29, 2026·قراءة 5 دقائق

للحصول على أسعار صرف حية في Google Sheets، الصق دالة Apps Script مخصصة تستدعي /v1/latest/{base} مع مفتاحك في ترويسة Authorization، ثم اكتب =FXRATE("USD","EUR") في أي خلية. المفتاح المجاني يغطي 10,000 استدعاء شهريًا دون بطاقة. الدالة أدناه تخزّن مؤقتًا لعشر دقائق وتعالج الخطأين اللذين ستصادفهما فعلًا. إنها مدخل العملات الحي لنموذج أو لوحة متابعة تحتفظ بها في Sheets.

نقاط أساسية
الدالة المخصصة تمنحك =FXRATE("USD","JPY") في أي خلية — دون تثبيت أي إضافة.
استدعاء واحد لـ/v1/latest/{base}?symbols={quote} يعيد الزوج الذي طلبته.
مرّر مفتاحك بصيغة Authorization: Bearer exr_live_...؛ وCacheService يبقيك داخل الحصة.
الخطة المجانية 10,000 استدعاء شهريًا بمعدل 12 طلبًا في الدقيقة، دون بطاقة.
الأسعار إرشادية — للنمذجة والتحليل والعرض، لا لتسوية صفقة.

احصل على مفتاح API مجاني

سجّل في exchangerate.dev/signup. بعد تأكيد البريد تعرض لوحة التحكم مفتاحًا يبدأ بـexr_live_. انسخه — ستلصقه في Apps Script بعد قليل. الخطة المجانية 10,000 استدعاء شهريًا دون بطاقة.

افتح Apps Script من جدولك

افتح أي جدول في Google Sheets. من القائمة، اضغط الإضافات ← Apps Script. يفتح تبويب جديد فيه دالة function myFunction() {} افتراضية. احذف محتواها — ستستبدله في الخطوة التالية.

الصق دالة FXRATE

استبدل محتوى المحرر بهذه الدالة. تستدعي exchangerate.dev، وتخزّن كل زوج مؤقتًا لعشر دقائق عبر CacheService، وتعيد علامة مقروءة للخطأين الممكنين (401 و429).

Code.gscopy
// google-sheets: Apps Script Code.gs
const CACHE_TTL = 600; // Cache successful responses for 10 minutes.

/**
 * Returns an indicative exchange rate for one currency pair.
 * @param {string} from Three-letter base currency code.
 * @param {string} to Three-letter quote currency code.
 * @return {number|string} The rate or a readable error marker.
 * @customfunction
 */
function FXRATE(from, to) {
  from = (from || 'USD').toString().trim().toUpperCase();
  to = (to || 'EUR').toString().trim().toUpperCase();

  if (!/^[A-Z]{3}$/.test(from) || !/^[A-Z]{3}$/.test(to)) return '#NO_PAIR';

  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}`;
  let resp;
  try {
    resp = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
  } catch {
    return '#FETCH_ERROR';
  }

  const code = resp.getResponseCode();
  if (code === 401 || code === 403) return '#ACCESS_ERROR';
  if (code === 429) return '#RATE_LIMIT';
  if (code !== 200) return '#ERROR';

  let data;
  try { data = JSON.parse(resp.getContentText()); }
  catch { return '#INVALID_RESPONSE'; }
  const rate = data && data.rates && data.rates[to];
  if (rate == null) return '#NO_PAIR';
  if (typeof rate !== 'number' || !Number.isFinite(rate) || rate <= 0) return '#INVALID_RESPONSE';
  cache.put(cacheKey, String(rate), CACHE_TTL);
  return Number(rate); // coerce so cells sum and sort
}

استخدم =FXRATE() في أي خلية

ارجع إلى الجدول واكتب =FXRATE("USD","EUR") في خلية فارغة. بعد ثانية تقريبًا تعرض الخلية السعر الحالي. الدالة نفسها تعمل مع أي زوج مدعوم — بدّل رمزي العملتين:

Sheets formula · pairscopy
// 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=JPYcopy
{
  "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."
}
تبني هذا بمساعدة مساعد ذكاء اصطناعي؟
ينشر exchangerate.dev خادم MCP وملف llms.txt، فيستطيع Claude أو Cursor أو ChatGPT قراءة المخطط الحي وكتابة الدالة نيابة عنك. اطلب منه: «ابنِ دالة مخصصة في Google Sheets باسم FXRATE تأخذ عملة مصدر وعملة هدف وتعيد السعر الحي من 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_ERRORالمفتاح مفقود أو غير صالح. أعد نسخه من لوحة التحكم إلى API_KEY في أعلى Code.gs.
429تعرض الخلية #RATE_LIMITتجاوزت حد الدقيقة. عادةً يمنع التخزين المؤقت ذلك؛ ارفع CACHE_TTL، أو ارتقِ بالخطة من /pricing.
تعرض الخلية #NO_PAIRلم ترد عملة الهدف في الرد. تحقق أن الرمز عملة ISO مدعومة (مثل JPY لا JYP).
تبقى الخلية على Loading…يحتاج Apps Script إلى إذن الطلبات الخارجية. شغّل الدالة مرة من شريط أدوات المحرر ليظهر الطلب، ثم اقبله.
أسعار إرشادية لا تصلح للتسوية
تُنشر هذه الأسعار للنمذجة والتحليل والعرض. ليست تسعيرة تداول — لا تستخدمها لتسوية صفقة أو تحويل. يذكر كل رد ذلك في حقل notice الخاص به.
ER
exchangerate.dev
أدلة تكامل للمطورين.

تابع القراءة

Tutorialأسعار صرف حية في Excel عبر Power Queryاقرأ Tutorialتحويل العملات في JavaScript وNode.jsاقرأ Tutorialكيف تجلب أسعار الصرف في Pythonاقرأ
المزيد من المقارناتFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
تعلّمأسعار الصرف المرجعية للبنك المركزي الأوروبي، موضحةتحويل العملات في JavaScript وNode.jsكيف تجلب أسعار الصرف في Python
أسعار مباشرةEUR/USDGBP/USDUSD/JPY