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関連

    漢字かな交じり文をひらがなにするマクロ

    Yahoo!のテキスト解析Web API(ルビ振り)を使用して、漢字か…

  2. Office アドイン

    [Office用アプリ]OneNote Clipperをアプリから使う。

    先日Chrome版が公開された、「OneNote Clipper」です…

  3. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  4. Office関連

    選択している行の高さを増やすExcelマクロ

    Excelの表を印刷しようとしたとき、ビミョーに文字が切れていてイラッ…

  5. Office関連

    PDFを分割するVBAマクロ

    「VBA PDF 分割」といったキーワード検索でのアクセスがありました…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP