Excel et les modules Yoctopuce en 2023

Excel et les modules Yoctopuce en 2023

Le support Yoctopuce reçoit régulièrement des questions concernant l'utilisation des modules Yoctopuce depuis une feuille de calcul Excel. Les versions d'Office changeant régulièrement, il est temps de remettre à jour nos informations à ce sujet.




Il y a quelques années, nous avons documenté deux manières d'accéder aux modules Yoctopuce:

  • En créant un add-in personnalisé, écrit en C#, qui s'installe dans Excel et ajoute de nouvelles fonctions VBA pour accéder aux modules Yoctopuce ;
  • A l'aide d'un serveur RTD Yoctopuce, qui permet d'obtenir des valeurs qui changent en temps réel directement dans les feuilles de calcul. Le petit serveur RTD fourni à titre d'exemple, relativement générique, a été mis à jour quelques temps après la publication de l'article original.

Quand nous avions écrit ces articles, Office 365, Microsoft 365 et Microsoft 365 for the web n'existaient pas encore, donc ils n'y sont pas mentionnés. Alors, est-ce que ces méthodes d'intégration marchent encore avec les nouvelles versions de la suite Microsoft ?

Utilisation en local sous Windows

Si vous utilisez l'application Excel installée directement sur votre PC, que ce soit avec une licence perpétuelle de type Office 2021 ou un abonnement Microsoft 365, vous pouvez toujours utiliser les méthodes d'intégration décrites dans les articles cités ci-dessus: elles sont encore supportées sur les versions d'Office en 2023. Il y a juste quelques différences pour la procédure d'installation.

Il n'est plus nécessaire de poser les fichiers de l'Add-in dans un répertoire particulier d'Excel. Si vous voulez utiliser le serveur RTD Yoctopuce, téléchargez le fichier zip de la nouvelle version que nous venons de recompiler avec les librairies à jour, ouvrez l'archive et posez tous les fichiers dans un répertoire de votre choix, par exemple le même répertoire où vous allez sauver votre classeur Excel. Ensuite, pour l'utiliser,

  1. Lancez Excel et ouvrez la feuille de calcul où vous désirez utiliser les modules Yoctopuce
  2. Utilisez le menu Fichier, Ouvrir pour ouvrir le fichier YoctoRTD2023-AddIn64-packed.dll que vous avez sorti de l'archive. Excel vous annoncera alors que l'add-in n'est pas signé:

    Avertissement que l'add-in n'est pas signé
    Avertissement que l'add-in n'est pas signé


    Cliquez sur le bouton de gauche, "Activer cet add-in pour cette session seulement".

  3. A ce stade, un nouveau menu Add-ins vient d'apparaître dans Excel. Vous y trouverez une rubrique Yoctopuce Sensor RTD Server qui permet entre autres de faire apparaître la console traçant les activités des modules Yoctopuce.
  4. Dans une cellule de votre tableau, tapez la formule =YSensorValue("any"). Si vous avez un capteur Yoctopuce branché, sa valeur apparaîtra dans le tableau, et sera automatiquement rafraîchie en continu.

Sympa, non ?
Sympa, non ?



Utilisation la plus portable

Si vous ne voulez pas, ou ne pouvez pas, installer l'add-in Yoctopuce, par exemple parce que vous utilisez Excel sur macOS ou Microsoft 365 for the web, il existe désormais une nouvelle manière d'accéder aux modules Yoctopuce: Office Script.

Office Script vous permet de créer des petits programmes qui peuvent mettre à jour des données dans votre classeur Excel. Il ne s'agit donc pas de fonctions que vous pouvez utiliser dans les formules Excel, mais plutôt de macros qui peuvent être lancées à un moment donné, par exemple en pressant sur un bouton, pour remplir automatiquement des cellules. Voici un exemple de fonction Office Script qui insère dans la feuille courante la valeur courante de toutes les fonctions des modules Yoctopuce détectés:

async function main(workbook: ExcelScript.Workbook): Promise<void>
{
  let values: YPRecs = await getAdvertisedValues();

  // Create a table in the Excel sheet with light sensor values
  let sheet = workbook.getActiveWorksheet();
  let headers: string[][] = [["Type", "HardwareId", "LogicalName", "Value"]];
  let headerRange = sheet.getRange("B2:E2");
  headerRange.setValues(headers);
  headerRange.getFormat().getFill().setColor("#4472C4");
  headerRange.getFormat().getFont().setColor("white");

  // Create the product data rows.
  let sensorData: (string | number)[][] = [];
  for (let functionType in values) {
    for (let rec of values[functionType]) {
      sensorData.push([functionType,
        rec.hardwareId, rec.logicalName, rec.advertisedValue])
    }
  }
  let dataRange = sheet.getRange("B3:E" + (3 + sensorData.length - 1));
  dataRange.setValues(sensorData);
}


Ce script utilise une fonction getAdvertisedValues(), que nous devons définir pour accéder à l'état des modules Yoctopuce. Or, bien que basé sur TypeScript, Office Script ne permet pas d'inclure directement la librairie de programmation Yoctopuce, car Microsoft a volontairement bridé le langage pour éviter d'introduire des failles de sécurité. Il est néanmoins possible de faire des requêtes HTTP pour accéder à l'interface REST des modules Yoctopuce grâce à la fonction fetch(). Voici donc comment lire l'état global des fonctions Yoctopuce à travers l'interface REST de VirtualHub:

async function getAdvertisedValues(): Promise<YPRecs>
{
  // Retrieve published function values from VirtualHub
  let fetchResult = await
    fetch('http://127.0.0.1:4444/api/services/yellowPages.json');
  return await fetchResult.json();
}

// declare the structure of the JSON data
interface YPRecs
{
  [serviceName: string]: YPRecord[]
}

interface YPRecord
{
  baseType: number;
  hardwareId: string;
  logicalName: string;
  advertisedValue: string;
  index: number
}


On peut ensuite facilement créer un bouton qui lance le script, et on obtient le résultat suivant:

Mesures capturées par Office Script
Mesures capturées par Office Script


L'intérêt de cette méthode est qu'elle est extrêmement portable: vous pourriez même l'utiliser au milieu de nulle part avec Microsoft 365 for the web, en combinaison avec VirtualHub for web, pour inclure dans votre feuille Excel des données envoyées par un YoctoHub-GSM-4G.

Par contre, à ce jour, il n'est pas possible d'utiliser Office Script pour mettre à jour continuellement une cellule, comme on peut le faire avec le serveur RTD: pour l'instant, une macro Office Script doit forcément être lancée par un click, et se terminer après un temps déterminé.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.