J'essaie d'identifier le nom de l'utilisateur actuel pour faire des notes de qui a été modifiée comme ceci: mais ce ne fonctionnera pas - le nom de l'utilisateur est une chaîne vide.
Où est-ce que je me suis trompé? P> P>
4 Réponses :
Je suppose que vous avez cette pièce de code définie pour exécuter à l'intérieur d'une fonction code> onedit code> (ou un déclencheur d'édition). p>
Si vous êtes sur un compte de consommation, SESSION.GETATIVEURE (). GesTemail () Code> 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. p>
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
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; }
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.
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); }
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); }
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