LANG SELRCT

コードを書く場所についてはこちら

2016年6月25日土曜日

スクリプトの実行時間を取得してシートに書き出す

スクリプトを実行してから処理が終わるまでの時間を計測したいと思った時に書いてみたコードです。
計測するだけならGoogle Apps Scriptと言うより、new Date()を使ったJavaScriptの処理になりますが、せっかくスプレッドシート上でGoogle Apps Scriptを使うので、取得した計測時間をシートに入力して時間の経過を見えるようにしてみます。

今回の例では、A列のテキストを使ってそのテキストをGoogle検索するためのリンクをB列に作成するということをやり、その処理を実行するのにかかった時間をC列に入力していくということをやっています。

A列のテキストはある程度数があったほうがわかりやすいので、例では47都道府県を入力しました。同じことを試す場合は下の方にスクリプトを実行する前の都道府県データ表を貼り付けたので、スプレッドシートにコピペして試してみてください。

Google検索するためのリンクの作成については、以前このブログで書いた「シートにHyperlink関数を入力する2(複数のテキストにリンクを作成する)」も御覧ください。
今回のコードは、その時に書いたコードに時間の計測をするコードを追加したものになります。


ポイント
1. 処理を開始した日時を取得してstartに入れます
var start = new Date();

2. 処理が終わった日時を取得してendに入れます
var end = new Date();

3. 経過した時間(秒)をtime_pastに入れます
var time_past = (end - start) / 1000;

4. それをC列に入力します
sh.getRange(i, col + 2).setValue(time_past);


コード.gs
function setFormula_getValue_time_past() {
    var site = 'https://www.google.co.jp/#q=';
    var ss = SpreadsheetApp.getActive();
    var sh = ss.getActiveSheet();
    var row = 1;
    var col = 1;
    var len = sh.getRange("A:A").getValues().filter(String).length;
    var row = sh.getRange("B:B").getValues().filter(String).length;
    var start = new Date();

    for (var i = row + 1; i < len + 1; i++) {
        var text = sh.getRange(i, col).getValue();
        var hyperlink = '=Hyperlink("' + site + text + '","' + text + '")';
        sh.getRange(i, col + 1).setFormula(hyperlink);

        var end = new Date();
       var time_past = (end - start) / 1000;
        sh.getRange(i, col + 2).setValue(time_past);
        row++;
    }
}


コードを実行してみる

スクリプトを実行する前のデータはこうなっています。


スクリプトを実行すると、B列にリンクが自動で作成されていき、C列に処理時間が入力されていきます。


実行結果

今回僕が実行した時に最後の沖縄県までのGoogle検索リンクを作成するのにかかった時間は5.891秒でした。
スクリプトの処理にかかる時間はその時の通信状態や環境によって多少の誤差はあると思いますが、今回のような単純なリンクの作成程度ならばこのくらいの時間で実行できるということがわかりました。

スクリプトの実行にかかる時間を計測することで、実はひとつ大きな制限を越えることができます。
Google Apps Scriptでいろいろなコードを書いていると、そのうち幾つもの処理を一つのスクリプトの中で実行したくなってくると思います。万が一そうなってこなくても、ひとつのスクリプトの中で重たい処理をする場合、おそらく一度はひっかかるGoogle Apps Scriptの5分の制限というものがあります。
せっかく書いた長いコードが5分以上かかって実行しきれずに使えないというのは報われないので、制限を越えて実行できる方法を僕なりに試行錯誤したものを次回以降に書いていこうと思います。


今回使ったデータ
検索ワードリンク処理時間
北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
新潟県
富山県
石川県
福井県
山梨県
長野県
岐阜県
静岡県
愛知県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
徳島県
香川県
愛媛県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県