質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

7113閲覧

スプレッドシートで特定セルの更新をした更新者の名前を表示するには?

jm3atn

総合スコア9

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

4クリップ

投稿2018/10/12 00:11

スプレッドシートをgoogleアカウントで共有しています。

スプレッドシートでも多少は過去履歴を確認できるのですが、わかりやすく表の中に誰がそのセルを更新したか表示したいと思います。

例えばA1のセルを更新したら、A2にその人の名前が入るといった具合です。

グーグルアカウントよりも名前のほうがいいのですが、そのようなことは可能でしょうか?
別ファイルにグーグルアカウントと名前のリストを用意してマッチした名前を引っ張ってくるのでも構いません。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2018/10/12 02:22

G Suite を導入している企業でしたら可能です。
guest

回答2

0

ここに、そのような機能を実現するためのアイデアがあります。

Cell last modified date & user stamp Google Sheets?

1つ目の回答にあるように、Apps Script は「あるシートを」「あるユーザーが」使っている時に動くものであり(なので、初回は操作者による承認アクションが発生する)、あるユーザーがその時点で(なんらかのセルを更新した自分以外のユーザーの)メールアドレスやユーザー名を取得する機能はありません。

このためちゃんとやろうとするなら、2つ目の回答にあるように、「更新する可能性があるすべてのユーザーでそのスクリプトが動く」ように各自に設定してもらい、かつ「同時更新時に衝突を回避する」しくみも必要です。なので、作り込みはかなり大変そうです。

私が過去に似たようなシートを運用していた際は、「更新者」という列を作って更新者をリストで選ぶようにしていました。更新の際は、各自が責任持って自分自身を選択しておくという運用です。そのシートでは1行で1つのデータを表すようにしていたので、セル単位ということではありませんが、ご参考になれば幸いです。

投稿2018/10/12 01:09

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/10/12 03:39

「更新者」方式は、多分質問者様の状況に適した優れたアイデアだと思います。セルとおっしゃっておられまうすが、過去の質問のタイプ2のように、実際には行指向のデータであるはず。 (仮に行単位でなければ、必ず右に書ける(右が未使用セルである)という保証がないので、こういう質問にならないはず)
guest

0

他人の褌感がすごいんですが、結論として、多分質問者さまのやりたいことは無理かなーと思います。

まとめると

  • G suiteじゃないとそもそもダメ(macaron_xxx様の質問と同旨)

→動作確認した結果として、リンクを知っている人は編集可の状態で共有しても、別ブラウザで別のgoogleアカウントでログインして開いても、元ユーザ側には「匿名ビーバー」とかで表示されます(動物は状況依存)。
→そもそもonEditが動いてない(っぽい。仕様は調べてない)

  • G suiteでもonEditではダメ

仕様に書いてあったんですが、onOpen/onEditとかだとメールアドレスが取れない
→動作確認した結果として、onEditで別のGsuiteアカウントで編集すると上記仕様のように空文字になりました。つまり、空白に上書く効果はあるが、最初から空白だと意味がない
→hotta様も書いておられるとおり、各ユーザが初回アクセス時にスクリプトを認証するような動きにしないとだめ(そういう設定にする方法はわかりませんでした。調べてもないです)
→あと、この方式でも基本取れるのはemailっぽい(G Suite特有の関数は詳しくないのであんま見てないです)

javascript

1//検証したコード 2function onEdit(e) { 3 const user = getUserInfo(e.user); 4 const targetCell = e.range.offset(0, 1); 5 targetCell.setValue(user); 6} 7function getUserInfo(user) { 8 user = Session.getActiveUser(); //質問者様提示の参考サイトはここと同じことをやっていると思います。 9 //user = Session.getEffectiveUser(); 10 return user.getEmail(); 11}

今の方針を貫くにはとりあえずG Suiteを契約するしかないですかね。
ただ、契約したところで、G SuiteでのGASのサポートできる人は限られるでしょうけど。

あとはやりたいこと次第ですかね。
シート(ブック)を人ごとにわけて、それを統合するシートを持つとか。それはそれでしんどいか。
私がそういう立場だったらgit(gitlab/bitbucket/team service)で、csv/mdでやると思いますが。

投稿2018/10/12 03:36

編集2018/10/15 01:44
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2018/10/12 06:10

提示された仕様にはG Suiteドメインが同じな場合はこの限りではない、的なことが書いてあるので、てっきり取れるもんだと思ってました。。 動作確認ありがとうございます!
papinianus

2018/10/12 10:46

パラグラフの最後にありますよね。でも、空白でした。ただG Suiteだとスクリプトは動いたのでトリガー設定したりするとできるのかもしれません。少なくともonEditとSessionだと動作しませんでした。
jm3atn

2018/10/13 17:36

皆様、有難うございます。感謝です。 なかなか難しいのですね。 ネットで見てますと、別シートにログを取るのは見つけました。 http://hito-ride.com/?p=813 ただ、googleアカウントが丸見えなので、個人情報がという問題になるようです。 更新者名を本人に入れてもらうというのが、いいかともおもうのですが、 名前を入れる目的はそのセルをいじった人がだれかわからなくなると、次の人がそのセルを書き換えていいのか残しておくべきなのかわからなくなるというところにあります。 リンク先のログで保存するgoogleアカウントを名前とアカウントの対応表みたいなのから引っ張り出して、名前に変えるなどは可能でしょうか? 50人くらいいるのですが
papinianus

2018/10/15 01:52 編集

すみませんが、質問に追記していただきたいのですが G Suiteは使っていない? 共有方法はどうやっていますか? その見つけたサイトのコードは動作しますか?(別シートにemailが取れますか?) 少なくとも 1. 私の個人の(G suiteでない)スクリプトで 2. 招待制による共有で(共同編集者のgoogleアカウントを指定して招待する方法。リンク共有ではない) 3. Session.getActiveUser().getEmail()による方法(該当記事による取得方法) 4. トリガを設定して動作させる方法 では、共同編集者のemailアドレスは取得できませんでした(取得できないは、""、空文字であったということです)。 共有方法か、2年たったことで仕様がかわったのかは分かりませんが、上記サイトを再現することが難しい状態です。 仮に、参考サイトをそのまま設定して、別シートに書き込む処理が、質問者様のスプレッドシートで動作するのであれば、私の回答のコードを同じようにトリガ設定すれば、当初質問で期待した動作をすると思います。
papinianus

2018/10/15 01:51

G Suiteを利用しているならメルアドが共有されても問題ないはずですし、招待しているならgmailが共有されても問題ないはず(アドレスは互いに知っているはず)ですし、さらに編集用アカウントを取るくらい無償なのでやってほしいと思いますが、仮にgmailアドレスを取得できるなら名前に置き換えることは可能です。 ただ、gmailを名前に置き換えたところで、おそらくスクリプト上置き換えるのでは、知識がある人には名前に対応したgmailがわかってしまう可能性が高いと思います。 それを回避するには、また別のスクリプトを書いて、そちらでdoPostを設定して、みたいなことをすればできるとは思いますが、抱えておられるプロジェクトでの技術レベルからいって、編集用gmailアカウントを取ってもらうのが最適解だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問