[Google Sheets] Convertisseur de devises

Bonjour,

Un outil qui permet de convertir les euros en un certain, nombre de devises.

La source est la plus récente de la Banque Centrale Européenne au format xml https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

En cliquant sur le drapeau du pays, la valeur sélectionnée est convertie dans la devise dudit pays : la valeur se positionne à droite et la devise est rappelée dans la cellule suivante.

Le programme ...

  • le menu personnalisé (merci Gilbert pour l'icone)
function onOpen() {
  SpreadsheetApp.getUi() 
      .createMenu('🎭Convertisseur🎭')
      .addItem('Ouvrir', 'openMyHTML')
      .addToUi();
};
  • le lancement du sidebar
function openMyHTML() {
  var html = HtmlService.createTemplateFromFile('index')
    .evaluate();
  html.setTitle('Convertisseur de Devises')
  SpreadsheetApp.getUi()
    //.showModalDialog(html, 'Dialog title');
    .showSidebar(html);
};
  • une fonction qui permettra d'inclure dans la page html le script et le style de la page
function include(File) {
  return HtmlService.createHtmlOutputFromFile(File).getContent();
};
  • la fonction en retour permettant de transformer la valeur sélectionnée en unité du pays
function reporter(devise,valeur) {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var feuille = SpreadsheetApp.getActive();
  var r = feuille.getActiveRange();
  r.offset(0,1).setValue(valeur * r.getValue());
  r.offset(0,2).setValue(devise);
};
  • la fonction de lecture du fichier xml de la BCE (ECB)
function getXML() { 
  var url = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'
  return UrlFetchApp.fetch(url).getContentText();
};

ensuite, côté html

  • la page html (merci Sébastien pour l'expression régulière)
<!DOCTYPE html>
<html>
  <head>
    <?!= include('style'); ?>
    <?!= include('script'); ?>
  </head>
  <body>
    <? 
    var txtxml = getXML();
    var quand = txtxml.split("time='")[1].split("'")[0]
    ?>
    <table><tr><td>ECB @ <?= quand ?></td><td id="de"> </td><td id="vers"> </td><td id="rate"> </td></tr></table>
    <div id="grille">
    <? 
    var data = txtxml.match(/[A-Z]+' rate='[\d.]+/g).map(v => v.split(/' rate='/));
    for (var i = 0; i < data.length; i++) { ?>
      <div id="drap<?= data[i][0] ?>" onclick="google.script.run.reporter('<?= data[i][0] ?>','<?= data[i][1] ?>')" onmouseover="mouseOver('<?= data[i][0] ?>','<?= data[i][1] ?>')" onmouseout="mouseOut()"></div>
    <? } ?>
    </div>
  </body>
</html>
  • le script permettant au survol d'afficher en haut du sidebar la valeur de conversion
<script>
function mouseOver(txt,val) {
  document.getElementById("de").innerHTML='EUR vers ';
  document.getElementById("vers").innerHTML=txt;
  document.getElementById("rate").innerHTML=val;
}

function mouseOut() {
  document.getElementById("de").innerHTML=" ";
  document.getElementById("vers").innerHTML=" ";
  document.getElementById("rate").innerHTML=" ";
}
</script>
  • et le style (non reproduit ici)

N'hésitez pas à me donner des retours et m'alerter sur des erreurs éventuelles.

Au-delà de l'utilité qu'on peut en trouver, il s'agit surtout d'un exercice de style

  1. menu personnalisé
  2. lancement d'un sidebar
  3. images 64
  4. lecture d'un fichier xml
  5. interaction avec le sidebar
    1. page dynamique incluant les valeurs du fichier xml
    2. retour vers la feuille pour pris en compte du choix

https://docs.google.com/spreadsheets/d/1gIwNGWjs1vgsAnuYkg1dGoigDeTfB0Vxbuv2EGsMrWQ/edit?usp=sharing

devises
Rechercher des sujets similaires à "google sheets convertisseur devises"