8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GoogleSpreadsheet‎で入力したセルへ自動的に更新者情報のメモを入れる

Last updated at Posted at 2016-09-24

やりたかったこと

どいつもこいつも社内のGoogle共有スプレッドシートに自分の署名を入力しないので、GASで自動的にメモを入れてやろうと考えた。
むしゃくしゃしてやった。今も反省してない。

この記事のポイント

  • GSUITEでないと更新者情報(email)は取得できない
  • onEdit(event)はプロジェクトのトリガーとして設定しなくても良い
  • user.getEmail()は「メールアドレスの表示」が許可されていないと使えない
  • メールアドレスを取得するようなコマンドを実行しない限りアクセス許可を求めてこない

GSUITEでないと更新者情報(email)は取得できない

割と有名かとは思うけど改めて言及しておきます。
Google Spreadsheet‎やForms等にアクセスしてデータを入力した人のユーザー情報は、GSUITEの同一ドメインのユーザー同士でしか取得ができないです。
https://developers.google.com/apps-script/reference/base/user

onEdit(event)はプロジェクトのトリガーとして設定しなくても良い

とりあえずシートの作り方とかスクリプトエディタの立ち上げ方は飛ばします。
その辺わからない方はGoogle先生に聞いてください。

記事のタイトルであるGoogleSpreadsheet‎で入力したセルへ自動的に更新者情報のメモを入れるコード自体は以下で終了です。

function onEdit(e) {
  var range = e.range;
  range.setNote('Last modified: ' + e.user.getEmail());
//  Logger.log(e);
}

私の感覚だとonEditをスクリプトエディタからプロジェクトのトリガーとして設定する必要があると考えていたのですが、onEditに関しては最初から自動で実行されているようです。
似たようなものにonChangeがありますが、こちらはプロジェクトのトリガーを明示的に設定しないと動きません。

この辺に関しては以下のブログを参考にさせて頂きました。
まだ中学生のブログ

user.getEmail()は「メールアドレスの表示」が許可されていないと使えない

ここからが実際に私がハマった箇所になりますが、上のコードを実行しただけでは上手く行かないんですよ。
具体的には渡されたe.userには何も入っていません。

入力されたセルにはsetNoteによって”Last modified: ”のメモだけ書き込まれます。

以前私が作った別のスプレッドシートやフォームではユーザー取得は上手く行っていたのに…はて?

スクリプト中にSession.getActiveUser().getEmail()のようなコマンドを実行しない限りアクセス許可を求めてこない

GASを作ったことがある人なら必ずと言っていいほど見かけたことのあるこのダイアログ。

GoogleAppsScriptの許可ダイアログ

今回の手順では、これが出てきていません。

こいつを出すためには、コーディング中のどこかの場面で許可が必要なコマンドを実行させる必要があるのですが、今回のように単に渡されてきたUser classを叩いてもそもそもClassが渡って来ていないので何も起こりません。

メールアドレスを取得するようなコマンドを実行する必要がある

というわけで今回は

function onEdit(e) {
  Session.getActiveUser().getEmail();  // ← 1回許可した後は消してOK
  var range = e.range;
  range.setNote('Last modified: ' + e.user.getEmail());
//  Logger.log(e);
}

といった感じで、メールアドレスの表示許可をGoogle先生から頂き解決する事が出来た。
(多分、スクリプトエディタのどっか弄れば許可設定できると思うけど…)

めでたしめでたし

メルアドじゃなく、実名に変換して記入したいところだけど、まぁいいや。

8
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?