공유한 스프레드시트에서 수정한 사용자의 이름을 얻고 싶습니다.
개요
GSuite에서 여러 도메인을 통해 공유한 스프레드시트나 Google 계정으로 만든 스프레드시트에서 편집하고 있는 사람의 이름을 설정, 취득하는 방법입니다.
배경
스프레드시트에서 편집 중인 사람의 정보를 검색하는 방법으로 Class Session의 Session.getActiveUser().getEmail() 및 Session.getEffectiveUser().getEmail() 을 사용하는 것이 일반적입니다.
예를 들어,
등이 있습니다.
그러나 Session.getActiveUser().getEmail() 은 GSuite의 동일한 도메인이 아니면 올바르게 검색할 수 없습니다.
However, these restrictions generally do not apply if the developer runs the script themselves or belongs to the same G Suite domain as the user.
Session.getEffectiveUser().getEmail() (은)는 거동을 알기 어렵습니다만, 스크립트를 실행한 사람의 정보를 취득합니다. onEdit이면 트리거 설정은 각자 취급되므로 잘 얻을 수 있습니다. 그러나, 트리거를 개발자가 설정했을 경우는, 개발자의 정보가 되어 버립니다. 다른 사람에게 공유하고 있더라도 개발자가 되어 버린다.
Gets information about the user under whose authority the script is running. If the script is a web app set to "execute as me"(the developer), this returns the developer's user account.
따라서 여러 도메인의 사람들과 스프레드 시트를 공유하고 있거나 원래 GSuite가 아닌 개인 Google 계정을 사용하는 경우에도 편집중인 사람의 정보를 설정하고 검색합니다. 스크립트를 만들어 보았습니다.
실제 움직임
계정 정보를 얻을 수 없다면 입력하라는 작전입니다.
자기 신고로 이름을 넣어 달라고 합니다.
편집하면 노트에 입력한 내용과 이름을 남깁니다.
메뉴에서 이름을 다시 입력할 수도 있습니다.
이름을 변경하면 해당 이름으로 기록이 남아 있습니다.
스프레드시트를 공유하면 다른 사용자도 같은 움직임이 됩니다. 이름을 입력하면 해당 이름으로 기록이 남아 있습니다.
소스 코드
/*
* ユーザー名を設定・取得する
* PropertiesService.getUserProperties(); を利用
*/
function getUser() {
var properties = PropertiesService.getUserProperties();
var user = properties.getProperty('user');
// 既にユーザー名が保存されていたらそれを返す
if (user) { return user; }
// ユーザー名が設定されていなければ、入力してもらう
while (user == null || user == 'cancel' || user == '') { // 文字が入力されるまで表示
user = Browser.inputBox("あなたの名前を入力してください");
}
properties.setProperty("user", user); // ユーザー名を保存
return user;
}
/*
* ユーザー名を再設定する
*/
function setUser() {
var properties = PropertiesService.getUserProperties();
var user = properties.getProperty('user');
user = Browser.inputBox('あなたの名前を入力してください' + '(現在の名前: ' + user + ')');
if (user != null && user != 'cancel' && user != '') {
properties.setProperty("user", user); // ユーザー名を保存
}
return user;
}
/*
* スプレッドシートを開いたときにイベントを発動
*/
function onOpen(e) {
// スプレッドシート開いた時に名前が入力されているか確認
getUser();
// メニューに追加
SpreadsheetApp
.getActiveSpreadsheet()
.addMenu("設定", [
{name: "名前を変更", functionName: "setUser"}
]);
}
/*
* 編集時にイベントを発動
*/
function onEdit(e) {
var range = e.range;
var value = e.value;
// セルの値が空欄の場合、replace()するとエラーになるので文字列に変えておく
if (value == undefined) { value = ''; }
range.setNote(
range.getNote() + '\n' // これまでのノートを先頭につける
+ Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yy/MM/dd HH:mm') // 編集日付
+ ': '
+ value.replace(/\r?\n/g, ' ') // 改行を削除して現在のセルの値
+ ' (' + getUser() + ')' // 編集した人の名前
);
}
복잡한 설명
이름은 자기 신고로 입력이므로 거짓말할 수도 있으므로 어디까지나 성선설로 운용할 필요가 있습니다. 그러나 이것이 익명 사용자도 사용할 수 있기 때문에 매우 유용합니다.
각 사람마다 입력 값을 저장하기 위해 PropertiesService.getUserProperties() 를 사용합니다. Hikozaru-san : Google Apps Script에서 설정 파일 저장 및 가져 오기 알기 쉬운 샘플이 있습니다.
여기서 onEdit()를 사용하고 있지만 트리거를 직접 설정해도 제대로 움직입니다.
Reference
이 문제에 관하여(공유한 스프레드시트에서 수정한 사용자의 이름을 얻고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ctoshiki/items/f4b1759b04a753586966텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)