現在のユーザーの名前を特定して、誰が次のように編集したかをメモしようとしています:
r.setComment("Edit at " + (new Date()) + " by " + Session.getActiveUser().getEmail());
しかし、それは機能しません - ユーザーの名前は空の文字列です。どこで私は間違えましたか?
現在のユーザーの名前を特定して、誰が次のように編集したかをメモしようとしています:
r.setComment("Edit at " + (new Date()) + " by " + Session.getActiveUser().getEmail());
しかし、それは機能しません - ユーザーの名前は空の文字列です。どこで私は間違えましたか?
朗報: この回避策で可能です!
ドキュメントのユーザーと所有者を明らかにする保護機能を使用しており、パフォーマンスを向上させるためにプロパティに保存しています。それを楽しんでください!
function onEdit(e) {
SpreadsheetApp.getUi().alert("User Email is " + getUserEmail());
}
function getUserEmail() {
var userEmail = PropertiesService.getUserProperties().getProperty("userEmail");
if(!userEmail) {
var protection = SpreadsheetApp.getActive().getRange("A1").protect();
// tric: the owner and user can not be removed
protection.removeEditors(protection.getEditors());
var editors = protection.getEditors();
if(editors.length === 2) {
var owner = SpreadsheetApp.getActive().getOwner();
editors.splice(editors.indexOf(owner),1); // remove owner, take the user
}
userEmail = editors[0];
protection.remove();
// saving for better performance next run
PropertiesService.getUserProperties().setProperty("userEmail",userEmail);
}
return userEmail;
}
このコードは、onEdit
関数 (または on edit トリガー) 内で実行するように設定されていると思います。
コンシューマ アカウントを使用している場合は、Session.getActiveUser().getEmail()
空白が返されます。スクリプトの作成者とユーザーの両方が同じ Google Apps ドメインにいる場合にのみ、メール アドレスが返されます。