Dates dans office script et Excel online
Bonjour,
Je suis dans une impasse (malgré plusieurs heures de recherche sur internet) pour l'utilisation de dates dans office script pour Excel online. J'arrive bien à utiliser des fonctions de dates avec une constante pour la date du jour (date()), mais impossible de récupérer la valeur d'une cellule au format date pour ensuite travailler dessus.
Pour résumer, je souhaite récupérer la valeur de la cellule A1 qui est une date entrée par l'utilisateur (15/10/2024 par exemple) et retirer le nombre de mois saisi en case B1 par l'utilisateur également (2 par exemple) et afficher la nouvelle date en C1 (15/08/2024 en toute logique). Evidemment dans le fichier final ce ne sont pas ces cases là et il y a d'autres choses autour, mais c'est cela que je n'arrive pas à faire.
Merci pour votre aide.
Bonjour,
Ne me demandez pas pourquoi, mais en JavaScript (le language sous-jacent au TypeScript, le langage de programmation dans OfficeScript), les dates sont le nombre de millisecondes depuis le 1e janvier 1970… Date - JavaScript | MDN
D'après la doc Microsoft JavaScript Date samples - Office Scripts | Microsoft Learn, voici comment convertir la valeur d'une cellule Excel en date JavaScript.
J'ai ensuite, en utilisant les fonctions de date de JavaScript, retiré 2 mois à la date voulue.
Enfin, d'après Convert Javascript Date object to Excel serial date number - Stack Overflow, on peut retrouver la date Excel avec le calcul en dernière étape.
Bon… comme vous le voyez c'est galère, notamment parce que Excel considère les dates comme le nombre de jours passés depuis le 1 janvier 1900 là où JavaScript le fait depuis les millisecondes passées depuis le 1 janvier 1970… Je vous recommanderai vivement de simplement utiliser les fonctions Excel du classeur pour faire ces calculs de date.
Quant à des tutos pour débuter, cela dépend. Sur office script précisément, vous trouverez peu de choses, surtout en français. Mais sur JavaScript il y a de la doc à foison, c'est un language extrêmement utilisé. Le transfert en TypeScript est facile, ensuite office script est identique, il rajoute juste la gestion des objets microsoft office/cloud (classeurs, mails, doc word, etc).
Enfin, n'hésitez pas à regarder sur la partie du forum AppScript pour GoogleSheets, les codes sont quasi identiques car AppScript est un autre dérivé de JavaScript.
function main(workbook: ExcelScript.Workbook) {
// -------------- CODE MICROSOFT --------------
// Read a date at cell A1 from Excel.
let dateRange = workbook.getActiveWorksheet().getRange("A1");
// Convert the Excel date to a JavaScript Date object.
let excelDateValue = dateRange.getValue() as number;
let jsDate = new Date(Math.round((excelDateValue - 25569) * 86400 * 1000));
console.log(jsDate);
// -------------- CODE MICROSOFT --------------
// on retire 2 mois sur la date actuelle
let jsDateModif = new Date(jsDate.setMonth(jsDate.getMonth() - 2));
// on reconvertit en date Excel
let xlDateF = 25569.0 + ((date.getTime() - (date.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
// ecriture en B1
workbook.getActiveWorksheet().getRange("B1").setValue(xlDateF);
}Merci beaucoup, même si comme vous dites ce n'est pas très pratique, c'est déjà un moyen pour moi d'avancer. Je vais essayer de trouver une autre solution en utilisant les fonctions du classeur pour simplifier ça. Et merci pour l'explication des système de date de Excel et de Java.
Bonne journée
Bonjour,
Oui, pour ce qui est du traitement de dates vous auriez vraiment intéret à le faire dans Excel, les scripts/macros devraient etre utilisés uniquement lorsqu'il n'y a pas d'alternatives. Après si c'est pour apprendre je comprends tout à fait.
Par contre ATTENTION !!!! On parle bien de JavaScript, non pas de Java. Absolument rien à voir, ne vous mélangez pas les pinceaux ! Ce sont des noms trompeurs je vous l'avoue, mais en dehors de la "forme du code" (; en fin de ligne, {}, etc.) les 2 langages n'ont rien à voir.
Pour résumer :
Toutes les instructions JavaScript sont utilisables en TypeScript (qui y ajoute d'autres fonctionnalités, et permet surtout de préciser le type des variables - d'où son nom). Et TypeScript est le langage de programmation des scripts office, qui incluent en plus des fonctions pour "dialoguer" avec les applications office.