タイムスタンプの挿入方法について

3,161 views
Skip to first unread message

山本厚士

unread,
May 27, 2014, 7:26:01 PM5/27/14
to google-app...@googlegroups.com
お世話になっております。
Spleadsheetを使用して、複数人で課題管理をおこなっているのですが更新内容を履歴表示を使用してチェックしているのですがチェックするのにかなり時間をようしておりますので
これを改善するため、編集があった行の最終列に変更日時を挿入するスクリプトを作成したいのですが、実現する方法がわかりません。
お力添えの程、宜しくお願い致します。

soundTricker

unread,
May 28, 2014, 8:42:27 PM5/28/14
to google-app...@googlegroups.com
To 山本さん

大橋 a.k.aサントリーです。

この場合はonEditトリガーを使うのが良いですね。
onEditという名前の関数を作って上げればSimpleTrigger(名前だけ設定しておけば自動的に走るTrigger onOpenやonInstallが該当)として
更新ごとにスクリプトが走るようになります。


また求めている感じのスクリプトは以下のようなコードになるはずです。

function onEdit(e) {
 
var range = e.range;
 
//var range = SpreadsheetApp.getActiveRange();
 
  range
.getSheet().getRange(range.getRow(), range.getLastColumn() + 1).setValue(new Date());
 
}


wezardnet

unread,
May 28, 2014, 9:05:42 PM5/28/14
to google-app...@googlegroups.com
こんにちは。wezardnet です。

大橋さんが回答されたとおり、セルの編集トリガーを使うと実現できそうです。
簡単なサンプルを作ってみましたので、よかったら試してみてください。
タイムスタンプ列は自分以外は編集不可になるように範囲保護した方が良いかもですね。


2014年5月28日水曜日 8時26分01秒 UTC+9 山本厚士:

山本厚士

unread,
May 28, 2014, 11:49:54 PM5/28/14
to google-app...@googlegroups.com
ありがとうございます。onEditの関数定義で、スクリプトトリガを設定しなくてもよいのですね!
昨晩、自分なりに作ったGASでできた!と思ってたのですが、うまく動作しない(タイムスタンプの挿入位置がおかしい)場合があり困っていたところでした。
最終的にはソースを丸ごとコピーすることになりましたが、勉強していきたいと思います。ありがとうございました。
onEdit(e)の「e」やwezardnetさんのソース中のe.sourceについてご解説頂ければ幸いです。


参考:自作コード
 var sheet = SpreadsheetApp.getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();        //編集のあった(アクティブな)セルを取得
  var col = sheet.getMaxColumns();
  col -= range.getColumnIndex();//編集のあったセルの列を取得
  var row = range.getRowIndex();//編集のあったセルの行を取得
  range = range.offset(0 , col);
  var time = new Date();
  time = Utilities.formatDate(time, "Asia/Tokyo" , "yyyy/MM/dd HH:mm:ss");
  range.setValue(time);
Message has been deleted

wezardnet

unread,
May 29, 2014, 3:11:51 AM5/29/14
to google-app...@googlegroups.com
山本さん、イベント発生時に渡されるパラメータについては
に説明があります。「Spreadsheet Edit Events」あたりを読むと良いかと思います。


2014年5月29日木曜日 12時49分54秒 UTC+9 山本厚士:

soundTricker

unread,
May 29, 2014, 3:12:19 AM5/29/14
to google-app...@googlegroups.com
eはonEditが呼び出されるときに自動的に渡される「イベントオブジェクト」で細かい解説は以下にあります。


今回のonEditのeでは以下の様なプロパティが利用可能です。
  • authMode
  • user
    • シートのユーザ、Session.getActiveUserなどで取得できるUserオブジェクト
      ※ドキュメント上だとこの書き方ですが、実際はemailなどは取得できてない気がします。
  • source
    • 更新が行われたSpreadsheet自体 Spreadsheet.getActiveSheet()などで取得できるSpreadsheetオブジェクト
  • range
    • 更新が行われたセル Spreadhset.getActiveRenge()などで取得できるRangeオブジェクト
  • value
    • 更新された値
となります。
私のスクリプト実はバグってますね。

こっちが正解です。

function onEdit(e) {
  
var range = e.range;
  
//var range = SpreadsheetApp.getActiveRange();

  
  range
.getSheet().getRange(range.getRow(), range.getSheet().getLastColumn() ).setValue(new Date());
  
}


2014年5月29日木曜日 12時49分54秒 UTC+9 山本厚士:

山本厚士

unread,
May 29, 2014, 7:18:07 PM5/29/14
to google-app...@googlegroups.com
おはようございます。
アドバイスおよび参考サイトをご紹介頂き、ありがとうございます。
やりたいことを、実現していけるように、勉強していきます。
今後とも宜しくお願い致します。
Reply all
Reply to author
Forward
0 new messages