11
votes

Déterminez l'utilisateur actuel dans le script d'applications

J'essaie d'identifier le nom de l'utilisateur actuel pour faire des notes de qui a été modifiée comme ceci: xxx

mais ce ne fonctionnera pas - le nom de l'utilisateur est une chaîne vide. Où est-ce que je me suis trompé?


2 commentaires

Veuillez vérifier cette Post . Votre script peut avoir le même problème.


Stackoverflow.com / Questions / 12172849 / ... Vérifiez cette réponse ... vous aurez l'idée


4 Réponses :


6
votes

Je suppose que vous avez cette pièce de code définie pour exécuter à l'intérieur d'une fonction onedit (ou un déclencheur d'édition).

Si vous êtes sur un compte de consommation, SESSION.GETATIVEURE (). GesTemail () retournera en blanc. Il ne renvoie l'adresse e-mail que lorsque l'auteur du script et de l'utilisateur seront sur le même domaine Google Apps.


1 commentaires

Si les politiques de sécurité ne permettent pas l'accès à l'identité de l'utilisateur, User.getEmail () retourne une chaîne de vide. Les circonstances dans lesquelles l'adresse e-mail est disponible varient: par exemple, l'adresse e-mail de l'utilisateur ne sont pas disponibles dans un contexte qui permet à un script d'être exécuté sans l'autorisation de l'utilisateur, comme un déclencheur à simple onOpen (e) ou onEdit (e), un fonction personnalisée dans Google Sheets, ou une application Web déployée pour « exécuter comme moi » (qui est autorisé par le développeur au lieu de l'utilisateur). developers.google.com/apps-script/reference/base/session



15
votes

Bonne nouvelle: c'est possible avec cette solution de contournement!

J'utilise une fonctionnalité de protection qui révèle l'utilisateur et le propriétaire du document et je le stocke dans les propriétés pour une meilleure performance. Amusez-vous! P>

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;
}


1 commentaires

En supposant que cela utilisait pour fonctionner, il ne fonctionne plus lorsque les getteurs renvoient une liste d'utilisateurs plutôt qu'une liste d'emails (voir développeurs.google.com/apps-script/reference/spreadsheet/.../a>). Pour obtenir le courrier électronique de l'utilisateur, la même limitation s'applique.



1
votes

J'ai eu des problèmes avec la solution de Wim den Herder lorsque j'ai utilisé des scripts allant de déclencheurs. Tout propriétaire non de script n'a pas pu modifier une cellule protégée. Cela a bien fonctionné si le script était exécuté à partir d'un bouton. Cependant, j'avais besoin de scripts pour courir périodiquement, ce fut ma solution:

Lorsqu'un utilisateur utilise la feuille la première fois qu'il / elle doit cliquer sur un bouton et exécuter ceci: p>

function identifyUser(){
   var input = Browser.inputBox('Enter User Id which will be used to save user to events (run once)');
  PropertiesService.getUserProperties().setProperty("ID", input);
}


0 commentaires

0
votes

Dans ce code, vous pouvez utiliser une cellule pour entrée. Les scripts autorisant ne sont pas requis.

function onEdit(e){
  checkUsername(e);
}

function checkUsername(e){
  var sheet = e.source.getActiveSheet();
  var sheetToCheck = 'Your profile';
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToCheck);
  var CellInputUsername = 'B4';
  var ActiveCell = SpreadsheetApp.getActive().getActiveRange().getA1Notation();

  if (sheet.getName() !== sheetToCheck || ActiveCell !== CellInputUsername){return;}

  var cellInput = sheetName.getRange(CellInputUsername).getValue();
  PropertiesService.getUserProperties().setProperty("Name", cellInput);

  // Make cell empty again for new user
  sheetName.getRange(CellInputUsername).setValue("");

  var Username = PropertiesService.getUserProperties().getProperty("Name");      
  SpreadsheetApp.getUi().alert("Hello " + Username);
}


0 commentaires