Affectation des macros à des objets graphiques dans le tableur ONLYOFFICE
Vous utilisez des macros pour automatiser des tâches de routine pour vos calculs ? Dans ce billet de blog, nous allons découvrir un exemple de macro qui peut vous être utile.
Pourquoi affecter des macros aux graphiques
La version 6.4 de ONLYOFFICE Docs apporte une nouvelle fonctionnalité au tableur – l’affectation d’une macro à exécuter lorsque vous cliquez sur un objet graphique. Cela vous permet de transformer des objets, par exemple, des formes automatiques en un bouton et de définir n’importe quelle macro comme gestionnaire lorsque vous appuyez dessus.
De cette façon, les utilisateurs peuvent cliquer sur le bouton correspondant à la macro assignée pour effectuer une action. C’est plus pratique, car ils n’ont pas besoin d’ouvrir la liste des macros à chaque fois qu’ils veulent en exécuter une.
Exemple de macro : diagramme automatique pour les taux de change des devises
Pour montrer comment cela fonctionne, nous avons créé 3 macros pour différentes paires de devises* (EUR/USD, USD/EUR, et BTC/USD). Les macros obtiennent des informations sur les taux de change des derniers jours et remplissent le tableau avec les valeurs reçues.
Elles sont affectées à 3 formes automatiques. Lorsque vous cliquez sur chaque image automatique, une macro est exécutée, le tableau est rempli avec les données pertinentes et le graphique correspondant est reconstruit.
Paire de devises USD/EUR
La macro a le code suivant :
(function()
{
var sCurPair = "USD_EUR";
function formatDate(d) {
var month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
function previousWeek(){
var today = new Date();
var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
return prevweek;
}
var sDate = formatDate(previousWeek());
var sEndDate = formatDate(new Date());
var apiKey = 'e5ed9f0b2b3aa6f4158f';
var sUrl = 'https://free.currconv.com/api/v7/convert?q='
+ sCurPair + '&amp;amp;compact=ultra' + '&amp;amp;date=' + sDate + "&amp;amp;endDate=" + sEndDate + '&amp;amp;apiKey=e5ed9f0b2b3aa6f4158f';
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", sUrl, false);
xmlHttp.send();
if (xmlHttp.readyState == 4 &amp;amp;&amp;amp; xmlHttp.status == 200) {
var oData = JSON.parse(xmlHttp.responseText);
for(var key in oData) {
var sheet = Api.GetSheet("Sheet1");
var oRange = sheet.GetRangeByNumber(0, 1);
oRange.SetValue(key);
var oDates = oData[key];
var nRow = 1;
for(var date in oDates) {
oRange = sheet.GetRangeByNumber(nRow, 0);
oRange.SetValue(date);
oRange = sheet.GetRangeByNumber(nRow, 1);
oRange.SetValue(oDates[date]);
nRow++;
}
}
}
})();
Paire de devises EUR/USD
La macro a le code suivant :
(function()
{
var sCurPair = "EUR_USD";
function formatDate(d) {
var month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
function previousWeek(){
var today = new Date();
var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
return prevweek;
}
var sDate = formatDate(previousWeek());
var sEndDate = formatDate(new Date());
var apiKey = 'e5ed9f0b2b3aa6f4158f';
var sUrl = 'https://free.currconv.com/api/v7/convert?q='
+ sCurPair + '&compact=ultra' + '&date=' + sDate + "&endDate=" + sEndDate + '&apiKey=e5ed9f0b2b3aa6f4158f';
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", sUrl, false);
xmlHttp.send();
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var oData = JSON.parse(xmlHttp.responseText);
for(var key in oData) {
var sheet = Api.GetSheet("Sheet1");
var oRange = sheet.GetRangeByNumber(0, 1);
oRange.SetValue(key);
var oDates = oData[key];
var nRow = 1;
for(var date in oDates) {
oRange = sheet.GetRangeByNumber(nRow, 0);
oRange.SetValue(date);
oRange = sheet.GetRangeByNumber(nRow, 1);
oRange.SetValue(oDates[date]);
nRow++;
}
}
}
})();
Paire de devises BTC/USD
La macro a le code suivant :
(function()
{
var sCurPair = "BTC_USD";
function formatDate(d) {
var month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
function previousWeek(){
var today = new Date();
var prevweek = new Date(today.getFullYear(), today.getMonth(), today.getDate()-7);
return prevweek;
}
var sDate = formatDate(previousWeek());
var sEndDate = formatDate(new Date());
var apiKey = 'e5ed9f0b2b3aa6f4158f';
var sUrl = 'https://free.currconv.com/api/v7/convert?q='
+ sCurPair + '&compact=ultra' + '&date=' + sDate + "&endDate=" + sEndDate + '&apiKey=e5ed9f0b2b3aa6f4158f';
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", sUrl, false);
xmlHttp.send();
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var oData = JSON.parse(xmlHttp.responseText);
for(var key in oData) {
var sheet = Api.GetSheet("Sheet1");
var oRange = sheet.GetRangeByNumber(0, 1);
oRange.SetValue(key);
var oDates = oData[key];
var nRow = 1;
for(var date in oDates) {
oRange = sheet.GetRangeByNumber(nRow, 0);
oRange.SetValue(date);
oRange = sheet.GetRangeByNumber(nRow, 1);
oRange.SetValue(oDates[date]);
nRow++;
}
}
}
})();
*Veuillez noter que dans ces macros, nous avons utilisé le service tiers CurrencyConverterApi.com pour obtenir des informations sur les taux de change. Il existe une limite au nombre de requêtes par heure. Si cette limite est dépassée, la macro ne fonctionnera pas. Si vous souhaitez utiliser cette macro, il est préférable de vous inscrire sur le site Web du service et d’utiliser votre propre clé dans le code de la macro.
Liens utiles
Plus d’informations sur les macros dans ONLYOFFICE
Obtenir la dernière version des éditeurs : communautaire / pour les entreprises / pour les développeurs
Toutes les nouveautés de ONLYOFFICE Docs v.6.4
Nouveaux modules complémentaires pour ONLYOFFICE : LanguageTool et Grammalecte