埋め込んだ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を利用すると、フィルターやソート機能が簡単に利用できるので非常に便利です。
この記事へのコメントはありません。