2017-06-05 2 views
0

私はGoogleドメイン(Gスイート)です。私は同じ行の列Aのセルを編集するとすぐにスプレッドシートの列Bのセルのエディタ/ユーザー名を取得するという簡単な作業をしたいと思います。ユーザーが列Aにデータを入力する場合、列Bは自動的に編集者がGoogleスプレッドシートに入力されますか?

私は、以下のようなGoogleスクリプトをいくつか見つけて使用しましたが、残念ながら動作しませんでした。

function checkEdits() { 
var SS = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet1 = SS.getSheetByName('Sheet1'); 
var specialCell = sheet1.getRange("A:A"); 

if (SS.getActiveCell().getA1Notation() == specialCell.getA1Notation()) { 
var htmlEmail = "Cell " + specialCell.getA1Notation() + 
    " edited by " + Session.getActiveUser().getEmail(); 
GmailApp.sendEmail("YOUR EMAIL HERE", "Spreadsheet Update " + new Date(), "", {htmlBody:htmlEmail}); 
} 
} 

ありがとうございました!

答えて

0

onEdit()トリガーを使用すると、セルが変更されたときに起動できますが、電子メールアドレスを取得できるようにスクリプトを最初に承認しない限り、ユーザーの電子メールアドレスは取得されません。マニュアルを参照してください。 simple triggers

onEdit()関数を呼び出すボタンを手動で起動する必要があります(スクリプトを一度許可する必要があります)。その後、ユーザーがそのシートを編集するたびにメールアドレスを収集します。

コードを貼り付けて保存してシートを編集すると、実際の動作を確認するために以下のコードを試してください。この場合、ログに2つの空白のエントリが表示されます。その後、onEdit()関数でデバッグをクリックし、スクリプトを承認すると、デバッグ時に情報がeに渡されないため、スクリプトは失敗します。シートを再度編集してログを確認すると、メールアドレスを取得できることがわかります。

管理者の場合は、Adminディレクトリを使用して、電子メールアドレスを使用してユーザー名などを取得できます。

function onEdit(e){ 
    Logger.log(e.user); 
    Logger.log(Session.getActiveUser().getEmail()); 
} 

コメント

ゴー '資源' へに基づきEDIT - > '詳細Googleサービス' と 'adminディレクトリのAPI' を有効にしても、APIコンソールでそれを有効にしてください。

Advanced Google Services

Admin SDK

のコードを貼り付けます( '編集' - > '現在のプロジェクトのトリガーを')に示すよう

function onEdit(e) { 
    var sheet = e.source.getActiveSheet().getName(); 
    if (sheet == "Sheet1") { 
     var sheet1 = e.source.getSheetByName('Sheet1'); 
     var range = e.range; 
     var getCol = range.getColumn(); 
     var getRow = range.getRow(); 

     if (getCol == 1) { 
      var user = e.user.getEmail(); 
       var name = AdminDirectory.Users.get(user).name.fullName; // familyName, fullName or givenName 
       sheet1.getRange(getRow, 2).setValue(name); 
      var htmlEmail = "Cell " + range.getA1Notation() + 
       " edited by " + name; 
      GmailApp.sendEmail("----------", "Spreadsheet Update " + new Date(), "", { 
       htmlBody : htmlEmail 
      }); 
     } 
    } 
} 

をとのonEditトリガーを作成 enter image description here

+0

こんにちはジェームス!ご返信ありがとうございます。スクリプトを少しだけ拡張して、列Aのデータのみを考慮し、ActiveUserを列Bのみに入れるようにしてください。私は上記の式を使ってこれを達成しようとしましたが、何とかしていません。スクリプトが要求した必要な権限を与えました。 – viv227295

+1

要求どおりに更新されました。 –

+0

こんにちはジェームス!ありがとうございました!それは少し不具合で期待通りに働いた。ユーザー名をプルアップする代わりに、何らかの形で電子メールIDのみを与えます。 https://stackoverflow.com/questions/15016628/google-script-how-do-i-getgivenname-of-getactiveuserに取り組もうとしている明確な投稿があります。しかし、それでも動作していません。またお邪魔して申し訳ありません! :) – viv227295

関連する問題