attachEventメソッドを使用して、マクロコード内のイベントを処理する方法

2024年11月13日著者:Denis

私たちは継続的にエディタを更新し、その機能を強化しています。ユーザーの皆さまが、それぞれのニーズにぴったりと合うようにカスタマイズできる機能を提供できるよう努めています。利用可能な強力なカスタマイズツールの1つが、ONLYOFFICEマクロです。この記事では、attachEventメソッドをご紹介し、マクロコードのイベントとどのように連携するかをご説明します。今回使用するスクリプトは、1回の実行で2つの別々のマクロを実行します。

Use the attachEvent method to handle events in your macro code

attachEvent メソッドについて

このメソッドは、指定されたイベントを監視し、イベントがトリガーされた際にコールバック関数を呼び出します。これにより、このコールバック内で追加のスクリプトを実行することができます。onWorksheetChange イベントを使用した実装の例を以下に示します。

var oWorksheet = Api.GetActiveSheet();
var oRange = oWorksheet.GetRange("A1");
oRange.SetValue("1");
Api.attachEvent("onWorksheetChange", function(oRange){
    console.log("onWorksheetChange");
    console.log(oRange.GetAddress());
});

attachEvent メソッドを使用して、1回の実行で2つのマクロを実行

スクリプトの最初の部分では、Import CSV マクロを使用して外部 CSV ファイルからデータをインポートし、テーブルに挿入します。2番目の部分では、コールバック内で実行し、特定の列のすべての値を計算し、結果を表示します。

まず、外部 CSV をインポートし、テーブルにデータを挿入します。

const oWorksheet = Api.GetActiveSheet();
    const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
    const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
    let sum = 0;

    function LoadFile() {
        $.ajax({
            url: 'pathToCsVfile',
            dataType: 'text',
        }).done(successFunction);
    }

    function successFunction(data) {
        const arrAllRows = data.split(/\r?\n|\r/);
        let i = 1;
        let j = 1;

        for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            const rowCells = arrAllRows[singleRow].split(',');
            for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
                oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
                j += 1;
            }
            i += 1;
            j = 1;
        }
    }

次に、選択した範囲の値を計算するcalculateSum()関数を導入します。

function calculateSum() {
        sum = 0; // Reset the sum
       oRange.ForEach(function(cell) { // Loop over all cells in the range
          const value = cell.GetValue();
            if (!isNaN(parseFloat(value))) {
             sum += parseFloat(value); // Add the cell's numeric value to the sum
            }
        });
    }

次に、選択した範囲の値を計算するcalculateSum()関数を導入します。続いて、LoadFile関数を呼び出し、ワークシート上のあらゆる変更を監視するattachEventメソッドを実行します。変更が発生すると、コールバック内でcalculateSum()関数が実行されます。

    LoadFile();

    // Attach event to recalculate sum when cells change
    Api.attachEvent("onWorksheetChange", function() {
        calculateSum();
    });

マクロの最後に、asc_calculate関数を実行してスプレッドシートを再読み込みし、選択したセルに計算結果を表示します。

// Update the cell B17 with the calculated sum
    let reload = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
        result.SetValue(`The sum: ${sum}`);
    });

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

(function() {
    const oWorksheet = Api.GetActiveSheet();
    const oRange = oWorksheet.GetRange("B2:B16");// set the range for calculations
    const result = Api.GetActiveSheet().GetRange("B17");// set the cell to display the result
    let sum = 0;

    function LoadFile() {
        $.ajax({
            url: 'pathToCsVfile',
            dataType: 'text',
        }).done(successFunction);
    }

    function successFunction(data) {
        const arrAllRows = data.split(/\r?\n|\r/);
        let i = 1;
        let j = 1;

        for (let singleRow = 0; singleRow < arrAllRows.length; singleRow++) {
            const rowCells = arrAllRows[singleRow].split(',');
            for (let rowCell = 0; rowCell < rowCells.length; rowCell++) {
                oWorksheet.GetCells(i, j).SetValue(rowCells[rowCell]);
                j += 1;
            }
            i += 1;
            j = 1;
        }
    }

    function calculateSum() {
        sum = 0; // Reset the sum
        oRange.ForEach(function(cell) { // Loop over all cells in the range
            const value = cell.GetValue();
            if (!isNaN(parseFloat(value))) {
                sum += parseFloat(value); // Add the cell's numeric value to the sum
            }
        });
    }

    LoadFile();

    // Attach event to recalculate sum when cells change
    Api.attachEvent("onWorksheetChange", function() {
        calculateSum();
    });

    // Update the cell B17 with the calculated sum
    let reload = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
        result.SetValue(`The sum: ${sum}`);
    });
})();

それでは、マクロを実行して、その動きを見てみましょう!

ONLYOFFICEでは、常に製品の柔軟性と汎用性を向上させるよう努めています。ONLYOFFICEマクロは、機能性をカスタマイズし、特定のニーズに対応できる優れたツールです。常に更新される広範なAPIメソッドのライブラリにより、独自のソリューションを作成できます。

このリソースを活用して独自のマクロを作成することをお勧めします。ご質問や共有したいマクロがありましたら、遠慮なくお問い合わせください。ディスカッションや共同作業などを歓迎いたします。

ONLYOFFICEの無料アカウントを登録する

オンラインでドキュメント、スプレッドシート、スライド、フォーム、PDFファイルの閲覧、編集、共同作業