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

    指定したセル範囲をUTF-8やEUC-JP等のテキストファイルとして出力するExcelアドイン

    以前この記事で、指定したセル範囲をUTF-8やEUC-JP等のテキスト…

  2. Office アドイン

    office-toolboxを使って簡単にOffice アドインを作成する方法

    以前「YO OFFICE」を使ってOffice アドインのひな型を作成…

  3. Office アドイン

    [Office用アプリ]アプリ開発コンテスト・受賞者発表

    以前書いた記事でお知らせしていた「Apps for Office アプ…

  4. Office関連

    Excel 2013 新関数一覧

    「関数一覧(Excel 2010)」と「関数一覧(Excel 2013…

  5. Office関連

    各ページを画像に変換するWordマクロ

    Excel MVPの伊藤さんがブログで、WordのPageオブジェクト…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP