Office関連

[Excel Services ECMAScript]ループによる入力と一括入力の処理時間について

埋め込んだExcelワークブックのセルに対して、ループで1セルずつ入力したときと特定のセル範囲にまとめて入力したときの処理の違いを実験してみました。

※ 入力するデータは「クジラ 外国 為替 確認 API」を使用してJSONP形式で取得しました。

<script type="text/javascript" src="http://r.office.microsoft.com/r/rlidExcelWLJS?v=1&kip=1"></script>
<script type="text/javascript" src="http://api.aoikujira.com/kawase/get.php?format=jsonp&code=usd&callback=cb"></script>
<script type="text/javascript">
    var fileToken = "SD92A165759188B352!269/-7880906317294423214/";
    var row = 1;

    if (window.attachEvent) {
        window.attachEvent("onload", loadEwaOnPageLoad);
    } else {
        window.addEventListener("DOMContentLoaded", loadEwaOnPageLoad, false);
    }

    function loadEwaOnPageLoad() {
        var props = {
            uiOptions: {
                showGridlines: false,
                showRowColumnHeaders: false,
                showParametersTaskPane: false
            },
            interactivityOptions: { }
        };

        Ewa.EwaControl.loadEwaAsync(fileToken, "myExcelDiv", props, onEwaLoaded);
    }

    function onEwaLoaded(result) {
        ewa = Ewa.EwaControl.getInstances().getItem(0);
    }
    
    function fnc1() {
        var data = cb();
        if (data.result == "ok") {
            var ary = new Array();
            ary[0] = new Array();
            for (key in data) {
                switch (key) {
                    case "result":
                    case "basecode":
                    case "update":
                    case "source":
                    case "API_URL":
                        break;
                    default:
                        ary[0][0] = key;
                        ary[0][1] = data[key];
                        ewa.getActiveWorkbook().getSheets().getItemByName("Sheet1").getRange(row,1,1,2).setValuesAsync(ary,setRangeValue,null);
                        row++;
                        break;
                }
            }
        }
    }
    
    function fnc2() {
        var data = cb();
        if (data.result == "ok") {
            var cnt = 0;
            var ary = new Array();
            for (key in data) {
                switch (key) {
                    case "result":
                    case "basecode":
                    case "update":
                    case "source":
                    case "API_URL":
                        break;
                    default:
                        ary[cnt] = new Array();
                        ary[cnt][0] = key;
                        ary[cnt][1] = data[key];
                        cnt++;
                        break;
                }
            }
            ewa.getActiveWorkbook().getSheets().getItemByName("Sheet1").getRange(1,1,cnt,2).setValuesAsync(ary,setRangeValue,null);
        }
    }
    
    function setRangeValue(asyncResult) {
        if (asyncResult.getCode() != 0) {
            alert("Err:" + asyncResult.getDescription());
        }
    }
</script>
<input type="button" value="ループで入力" onclick="fnc1();"></input><br>
<input type="button" value="まとめて入力" onclick="fnc2();"></input>
<div id="myExcelDiv" style="width: 350px; height: 250px"></div>





上記処理時間をそれぞれタイマーで計測したところ、ループでの処理が10秒掛かったのに対し、まとめて入力した場合は1秒掛かっていませんでした。
複数のセルにまとめてデータを入力する際は、一括して入力するのが良さそうです。

また、処理時間とは関係無い話ですが、上記のようにテーブル出力にExcel Web Appを利用すると、フィルターやソート機能が簡単に利用できるので非常に便利です。

Accessible Explorerのダウンロード先前のページ

文字コードを指定してURLエンコードを行う次のページ

関連記事

  1. Office関連

    ディスプレイのサイズを取得するVBAマクロ

    「VBA ディスプレイ 幅 高さ」といったキーワード検索でのアクセスが…

  2. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  3. Office関連

    文字列を指定した文字数で分割するVBA関数

    "01234567890123456789012…"というような長い文…

  4. Office関連

    Google Calendar APIを使って日本の祝日を取得するVBAマクロ

    祝日の一覧を用意する必要があったので、Google Calendar …

  5. Office関連

    第4回Office 365勉強会に参加してきました。

    2013/3/2(土)に品川にあるMicrosoftオフィスでOffi…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP