Médiaforma

All posts in API JavaScript

Ca y est, vous allez enfin écrire votre premier snippet dans Script Lab. Je sais que vous êtes impatient, alors, commençons tout de suite. Rassurez-vous, vous n’éprouverez aucune difficulté à écrire ce premier code, je vous le promets.

Après l’installation de Script Lab et le clic sur l’icône Code du ruban, un exemple de code simpliste s’affiche. Il s’agit d’un simple Hello World. Je vous l’avais dit, aucune difficulté pour écrire ce code … puisqu’il est déjà écrit.

Nous allons décortiquer ce code en détail. Cette étape est très importante. Elle conditionne toute la suite du livre. Passez le temps nécessaire pour bien l’assimiler.

Dans la partie supérieure du volet Code, remarquez les onglets Script, HTML, CSS et Libraries. Ils contiennent respectivement le code JavaScript/TypeScript, le code HTML et CSS de l’interface et les bibliothèques utilisées par le snippet.

Commençons par l’onglet HTML. Il contient les balises HTML de l’interface homme-machine (IHM) du snippet. C’est ce code qui s’affiche dans le volet Run lorsque vous cliquez sur l’icône Run du ruban. Dans cet exemple, l’interface comporte un texte dans un paragraphe (balise <p>)et un bouton (balise <button>) sont le label a été placé dans une balise <span> :

Remarquez les attributs class et id. Il vous permettront de styler les éléments en CSS et d’y faire référence en JavaScript/TypeScript.

L’onglet CSS ne contient aucune instruction. Libre à vous de compléter cet onglet pour styler l’interface.

L’onglet Libraries fait référence aux bibliothèques JavaScript, TypeScript et jQuery utilisées par le snippet. Pour l’instant, vous n’aurez aucune action dans cet onglet :

Enfin, l’onglet Script contient le code JavaScript/TypeScript du snippet. C’est dans cet onglet que vous passerez le plus de temps. Décortiquons le code qui se trouve dans cet onglet.

$("#run").click(() => tryCatch(run));




async function run() {

  console.log("Hello World");

}

/** Default helper for invoking an action and handling errors. */

async function tryCatch(callback) {

  try {

    await callback();

  } catch (error) {

    OfficeHelpers.UI.notify(error);

    OfficeHelpers.Utilities.log(error);

  }

}

La première instruction est écrite en jQuery. Elle associe un gestionnaire évènementiel au clic sur le bouton de l’interface HTML. La notation ES6 (arrow function) est utilisée pour simplifier l’écriture :

$("#run").click(() => tryCatch(run));

La function tryCatch() s’exécute de façon asynchrone. La structure try catch tente d’exécuter la fonction passée en argument (ici, la fonction run()). La fonction tryCatch() retourne une promesse (grâce au mot-clé async). Le mot-clé await attend la résolution de cette promesse. Si une erreur est retournée, le bloc catch est exécuté pour afficher un message d’erreur.

La fonction run() est également asynchrone (async). Elle se contente d’afficher un message Hello World dans la console.

Exécution du premier snippet

Pour exécuter ce premier snippet, cliquez sur l’icône Run de l’onglet Script Lab du ruban. Le volet Run s’affiche à droite du volet Code. Cliquez sur le bouton Run Code. Le résultat s’affiche dans la console :

Vous savez maintenant comment créer et exécuter un snippet élémentaire qui se content d’afficher Hello World dans la console. Dans la section suivante, vous allez en apprendre un peu plus sur la programmation asynchrone en JavaScript. Plusieurs techniques seront abordées, de la plus ancienne à la plus moderne. Chacune vous permettra de mieux comprendre les instructions async et await utilisées aujourd’hui.


Les mini-applications que vous créez dans Script Lab sont composées de code TypeScript/JavaScript, HTML et CSS. Elles sont désignées sous le nom snippets (extraits en français).

Les snippets sont supprimés si vous effacez le cache de votre navigateur. Pour les sauvegarder de manière plus durable, vous pouvez :

  • Les copier dans des fichiers sur votre ordinateur.
  • Les sauvegarder dans des gists publics ou privés (les gists sont un service GitHub. Ils vous permettent de partager facilement votre travail. Vous pouvez partager des fichiers uniques, des parties de fichiers ou, comme ici, des applications complètes).

Sauvegarde sur l’ordinateur

Dans la fenêtre Code, cliquez sur Share puis sur Copy to clipboard. Le code complet du snippet (sections Script, HTML, CSS et Libraries) est placé dans le presse-papiers. A vous de le coller dans un fichier Bloc-Notes et de le sauvegarder sur votre disque.

Sauvegarde dans un gist public

Pour utiliser la fonctionnalité Gist, vous devez vous connecter sur GitHib.

Dans la fenêtre Code, cliquez sur Share puis sur New public gist ou sur New secret gist pour sauvegarder votre code. Une boîte de dialogue vous incite à vous connecter sur GitHub :

Cliquez sur Sign in. Une nouvelle boîte de dialogue vous incite à vous connecter sur une URL et à taper le code d’identification qui vous a été envoyé par mail :

Cliquez sur le bouton Copier (à droite de l’URL) et collez le contenu du presse-papiers dans la barre d’adresses de votre navigateur. Vous atterrirez sur cette page :

Si vous avez déjà un compte GitHub, identifiez-vous en entrant votre nom d’utilisateur et votre mot de passe, puis cliquez sur Sign in.

Si vous n’avez pas encore un compte GitHub, cliquez sur Create an account et suivez la procédure de création d’un nouveau compte.

Une fois connecté sur GitHub, validez la communication avec Script Lab. Un token vous sera alors fourni :

Copiez-collez-le dans la boîte de dialogue Action required, puis validez en cliquant sur OK. Dans la partie droite de la barre de titre du volet Code, une icône indique que vous êtes connecté à GitHub :

Pour sauvegarder votre code, il suffit maintenant de cliquer sur Share puis sur New public gist ou sur New secret gist.

Pour ouvrir un snippet sauvegardé sur gist, cliquez sur l’icône du menu dans le volet Code (1), cliquez sur My Snippets (2) puis sur le snippet que vous voulez ouvrir (3) :

Vos sauvegardes sont également accessibles sur le site GitHub. Connectez-vous sur https://github.com, cliquez sur l’icône à droite de la barre d’outils et choisissez Your gists dans le menu :


Cliquez sur l’icône Code. Le volet Code s’affiche dans la partie droite de la fenêtre :

Ce volet peut être élargi en agissant sur sa barre de redimensionnement intérieure. Il peut également être transformé en une fenêtre flottante en glissant-déposant sa barre de titre, par exemple sur un deuxième écran. Pour transformer la fenêtre flottante en un volet d’Excel, il suffit de la déplacer dans la partie droite ou gauche de la fenêtre d’Excel. L’ancrage se fait quand le pointeur atteint la limite de la fenêtre d’Excel.

Vous pouvez également effectuer un zoom dans le code en pointant le volet/la fenêtre Code, en maintenant la touche Contrôle du clavier enfoncée et en agissant sur la roulette de la souris. Les raccourcis Contrôle – et Contrôle + peuvent également être utilisés après avoir donné le focus au volet/à la fenêtre Code en cliquant sur son contenu.

Enfin, voici deux raccourcis qui deviendront vite indispensables :

  • Contrôle + K + C commente les lignes sélectionnées.
  • Contrôle + K + U décommente les lignes sélectionnées.

L’icône Menu (1) permet d’accéder à des codes fournis en exemple avec Script Lab. Sélectionnez l’onglet Samples (2) et choisissez un des codes dans la partie droite du volet (3) :

Une fois l’exemple sélectionné, vous pouvez l’exécuter en cliquant sur Run dans le volet Code (1). Dans ce cas, le code est exécuté dans le volet qui contient le code. Si vous cliquez sur l’icône Run de l’onglet Script Lab du ruban (2), l’exécution se fera à côté du code. Ce deuxième mode d’exécution me semble plus pratique. En effet, les mises à jour du code sont immédiatement reportées dans le volet d’exécution :


Ouvrez Excel. Basculez sur l’onglet Insertion dans le ruban. Cliquez sur l’icône Mes compléments dans le groupe Compléments. La fenêtre Compléments Office s’affiche. Basculez sur l’onglet STORE (1). Tapez script lab dans la zone de recherche (2) puis appuyez sur la touche Entrée du clavier. Le complément Script Lab s’affiche. Cliquez sur Ajouter (3) pour l’ajouter à Excel :

Quelques secondes plus tard, l’onglet Script Lab est ajouté au ruban, et une bulle vous suggère de l’utiliser pour coder, exécuter et partager votre code :

Cliquez sur OK, puis basculez sur l’onglet Script Lab dans le ruban d’Excel :


La documentation officielle de l’API JavaScript pour Excel est accessible en cliquant sur ce lien :

https://bit.ly/32MqNpk

N’hésitez pas à vous y reporter pour avoir des exemples de code, ou si vous éprouvez des difficultés sur un point particulier. Et surtout, passez du temps à coder. Petit à petit, tout deviendra de plus en plus simple.

Pour faire vos premiers pas avec l’API JavaScript dans Excel, je vous suggère d’installer le complément Script Lab. Ce complément va vous permettre de :

  • Créer et éditer des codes qui contiennent du code JavaScript/TypeScript, HTML, CSS et qui font éventuellement référence à des données sur le Web.
  • Exécuter ces codes et voir le résultat sans quitter Excel.
  • Accéder à des exemple de code.
  • Partager directement votre code sur GitHub Gist.

En outre, vous profiterez pleinement de l’intellisense pour mettre au point plus facilement et plus rapidement vos compléments. Vous pourrez utiliser TypeScript 2.0+ et ses fonctionnalités avancées (expressions lambda, chaines modèle, async/await, etc.).

La prochaine étape va consister à installer Script Lab dans Excel.


Cet article passe très rapidement en revue les petits plus de TypeScript. Il est destiné aux personnes qui ne connaissent pas (encore) TypeScript.

Typage des variables

Contrairement à JavaScript, TypeScript est un langage fortement typé.

Lorsque vous définissez une variable ou une constante, vous pouvez définir son type de façon explicite. Les trois principaux types sont number, string et boolean.

Par exemple :

let nombre: number = 100;

const chaine: string = 'Une chaîne de caractères';

let boo: boolean = true;

Le typage peut également se faire d’une façon implicite, lors de l’affectation :

let nombre = 100;

const chaine = 'Une chaîne de caractères';

let boo = true;

Ici, nombre est clairement de type number, chaine de type string et boo de type boolean.

Chaînes de caractères

Les chaînes de caractères peuvent être définies sur plusieurs lignes en les encadrant par des cotes penchées (`). Ces cotes sont accessibles en appuyant simultanément sur les touches Alt Gr et 7.

let chaine = `Cette chaîne
est définie

sur plusieurs lignes`;

Il est possible d’inclure des variables ou des expressions dans des chaînes en les encapsulant entre ${} :

let a = 10;

let chaine = `La variable a vaut ${a}.`;

Enumérations

Vous pouvez définir des énumérations en TypeScript :

enum taille {

  grand = 10,

  moyen = 5,

  petit = 0;

}

Déstructuration

Il est possible d’affecter simultanément plusieurs données en utilisant des tableaux ou des objets littéraux :

let [a,b,c] = ['a','b','c'];

let t = ['d','e','f'];

[a,b,c] = t; //Déstructuration de tableau

console.log(a,b,c); // d e f

let rect = { x: 1, y: 2, width: 3, height: 4 };

let { width, height, x, y } = rect; //Déstructuration de littéral

console.log(x, y, width, height); // 1,2,3,4

Fonctions fléchées (arrow functions)

Ce code :

let resultat = function(a,b) {

  return a*b;

}

Est équivalent à :

let resultat = (a,b) =>  a*b;

Variables immuables

Les variables définies dans une méthode peuvent être immuables (constantes). Pour les déclarer, vous utiliserez le mot-clé const :

const a = 5;

const taille = {

  largeur: 100,

  hauteur : 30

}

Il existe de nombreux autres concepts très intéressants en TypeScript, mais cette brève introduction devrait suffire pour manipuler Excel à travers l’API. Si vous voulez aller plus loin, je vous suggère de consulter ce site : https://cdiese.fr/syntaxe-typescript-en-10-min/.


La bibliothèque Moment.js est très pratique car elle contient des fonctions pour soustraire et pour ajouter des informations horaires.

Voici quelques exemples.

La date dans 25 jours

Pour connaitre la date dans 25 jours, vous utiliserez la fonction moment().date(25,’days’).calendar() :

async function dans25jours() {

  await Excel.run(async (context) => {

    const feuille = context.workbook.worksheets.getActiveWorksheet();

    let date = moment().add(25,'days').calendar();

    feuille.getRange("A3").numberFormat = [["dddd D/MM/YYYY"]];

    feuille.getRange("A3").values = [[date]];

    await context.sync();

  });

}

Ce code est très semblable aux précédents, si ce n’est l’utilisation de la fonction add() pour obtenir la date dans 25 jours :

let date = moment().add(25,'days').calendar();

Voici un exemple d’exécution :

L’heure il y a 6 heures 30

Il est très simple de connaitre l’heure il y a 6 heures 30. Vous utiliserez pour cela la fonction moment().date(6.5,’hours’).calendar() :

async function ilya6heures30() {

  await Excel.run(async (context) => {

    const feuille = context.workbook.worksheets.getActiveWorksheet();

    let date = moment().subtract(6.5, 'hours').calendar();

    feuille.getRange("B3").numberFormat = [["hh:mm:ss"]];

    feuille.getRange("B3").values = [[date]];

    await context.sync();

  });

}

Voici un exemple d’exécution :