ONLYOFFICE’s diary

OSSドキュメントエディタの使い方やヒントをご紹介します

ONLYOFFICE計算エディタのグラフィックオブジェクトにマクロを割り当てる方法

計算のためのルーチンワークを自動化するためにマクロを使用してみませんか?今回は、便利なマクロの例をご紹介します。

https://www.onlyoffice.com/blog/wp-content/uploads/2021/09/onlyoffice-assign-macros-to-shapes.jpg

グラフィックにマクロを割り当てる理由

ONLYOFFICE Docsのバージョン6.4では、表計算エディタの新機能として、グラフィックオブジェクトをクリックしたときに実行されるマクロを割り当てる機能が追加されました。例えばオートシェイプのようなオブジェクトをボタンに変え、それを押したときのハンドラとして、任意のマクロを設定することができます。

こうすることで、ユーザーはマクロが割り当てられたボタンをクリックして、何らかのアクションを実行することができます。マクロを実行するたびにマクロのリストを開く必要がないので、より便利です。

マクロの例:為替レートを自動で図式化する

その動作を示すために、異なる通貨ペア*(EUR-USD、USD-EUR、BTC-USD)に対して、過去数日間の為替レートに関する情報を取得し、受け取った値で表を埋める3つのマクロを作成しました。

これらのマクロは、3つのオートシェイプに割り当てられています。各オートシェイプをクリックすると、マクロが実行され、テーブルに関連するデータが入力され、対応するチャートが再構築されます。

通貨ペア USD - EUR

https://www.onlyoffice.com/blog/wp-content/uploads/2021/09/onlyoffice-macros-usd-eur.png

マクロコードは以下の通りです。

(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;amp;compact=ultra' + '&amp;amp;amp;date=' + sDate + "&amp;amp;amp;endDate=" + sEndDate + '&amp;amp;amp;apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 &amp;amp;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++;
            }
        }
    }
})();

通貨ペア EUR - USD

https://www.onlyoffice.com/blog/wp-content/uploads/2021/09/onlyoffice-macros-eur-usd.png

マクロコードは以下の通りです。

(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 + '&amp;compact=ultra' + '&amp;date=' + sDate + "&amp;endDate=" + sEndDate + '&amp;apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 &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++;
            }
        }
    }
})();

通貨ペア BTC - USD

https://www.onlyoffice.com/blog/wp-content/uploads/2021/09/onlyoffice-macros-btc-usd.png

マクロコードは以下の通りです。

(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 + '&amp;compact=ultra' + '&amp;date=' + sDate + "&amp;endDate=" + sEndDate + '&amp;apiKey=e5ed9f0b2b3aa6f4158f';
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", sUrl, false);
    xmlHttp.send();
    if (xmlHttp.readyState == 4 &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++;
            }
        }
    }
})();

*注意:これらのマクロでは、為替レートに関する情報を取得するためにサードパーティーのサービスCurrencyConverterApi.comを使用しています。1時間あたりのリクエスト数には制限があります。この制限を超えた場合、マクロは動作しません。このマクロを使用したい場合は、サービスウェブサイトで登録し、マクロコードに独自のキーを使用したほうがよいでしょう。