ONLYOFFICEマクロで企業ロゴを探す方法

2023年08月30日著者:Denis

多くのロゴが存在する昨今、ロゴリファレンスを発見するのは少し厄介で、混乱を招く可能性があります。しかし、ONLYOFFICEマクロを使えば、このプロセスを自動化することができます。このブログ記事では、外部APIから複数のロゴタイプを同時に取得し、スプレッドシートに挿入するマクロの作成方法をご紹介します。

Find company logos with ONLYOFFICE macro

APIへのアクセス

このチュートリアルでは、APIに関する様々なリソースや洞察を提供するオンラインプラットフォームであるAPI Ninjasが提供するLogo APIを利用します。このプラットフォームは、開発者がプロジェクトに含めることができる無料のAPIのコレクションも提供しています。特にLogo APIは、様々な企業のロゴタイプ画像にアクセスできます。

マクロの構築

まず、アクティブ・シートをターゲットにします:

// Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();

次に、ドキュメントの選択範囲を取得する。この選択範囲内のセルの値がAPIリクエストで使われます:

var selectedRange = Api.GetSelection()

その後、ドキュメントに挿入するデータのタイトルを設定するロジックを追加します。まず、フィールド名(”name”、”ticker”、”image”)とカラム文字を含む配列を作成します:

  // Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };

カラムと値をマッピングしたら、valuesToInsertオブジェクトの各フィールド名をループします。各フィールドについて、対応するセルを取得し、セルが空かどうかをチェックします。セルが空の場合、oCell.SetValue()メソッドを使用して、フィールドに関連付けられた定義済みの値をセルに挿入します:

    // Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    } 

次に selectedRange.ForEach() 関数を使って、選択範囲の各セルを繰り返し処理します。各セルについて、セルの値をフェッチします。値が存在する場合、APIにAJAXリクエストが行われます。その後、レスポンス・データが成功コールバックで処理されます:

// Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
}

AJAX成功コールバック内で、APIレスポンスを取得します。次に、コードはレスポンスデータを繰り返し処理し、取得したデータをワークシートの特定の列に入力します。currentRow変数が入力する行を決定し、対応する列がデータで満たされます。AutoFit関数は、入力されたデータに基づいて列幅を調整するために使用されます:

 // Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
// Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }

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

(function() {
    // Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();
    // Get the currently selected range of cells
    var selectedRange = Api.GetSelection();
    // Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };
    // Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    } 
    // Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
                    console.log(result);
                    // Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
                        // Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }
                },
                error: function ajaxError(jqXHR) {
                    console.error('Error: ', jqXHR.responseText);
                }
            });
        }
    });
})();

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

このマクロがすぐにあなたの貴重な武器になることを願っています。ONLYOFFICE APIの汎用性と機能は、タスクをカスタマイズし、自動化するための大きな可能性を生み出します。

マクロ作りに没頭する一方で、ONLYOFFICE APIが提供する可能性を見逃さないでください。もし質問や革新的なアイデアがあれば、コメントや私たちと連絡を取ることで共有することをお勧めします。あなたの洞察は貴重であり、私たちはコラボレーションの可能性に興奮しています。