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

    選択したセルに連続行番号を振るWordマクロ

    Wordでマニュアルを作成するとき等、表の中で連番を振りたいときがよく…

  2. Office関連

    PowerShellからNetOfficeを使ってExcelを操作する方法

    先日、Excel MVPの伊藤さんがPowerShellからExcel…

  3. アイコン一覧

    Office 2013 アイコン一覧(Q)

    ・Office 2013 アイコン一覧 NUM…

  4. Office関連

    「いちばんやさしいPowerPoint VBAの教本」レビュー

    「インストラクターのネタ帳」で有名な伊藤さんが執筆された書籍第二弾、「…

  5. Office関連

    [Excel Services ECMAScript]jPrintAreaで埋め込んだブック部分のみ…

    jQuery + jPrintAreaを利用して、埋め込んだExcel…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP