Google Apps Script prend en charge déclencheurs , qui passent événements pour déclencher des fonctions. Malheureusement, l'environnement de développement vous permettra de tester des fonctions sans passer de paramètre, vous ne pouvez donc pas simuler un événement de cette façon. Si vous essayez, vous obtenez une erreur comme:
ReferenceError: 'e' n'est pas défini.
On pourrait traiter l'événement comme un paramètre facultatif et insérer une valeur par défaut dans la fonction de déclenchement en utilisant l'une des techniques de " Existe-t-il une meilleure façon de faire des paramètres de fonction facultatifs en JavaScript? ". Mais cela introduit un risque qu'un programmeur paresseux (levez la main si c'est vous!) Laisse ce code derrière lui, avec des effets secondaires imprévus.
Il y a sûrement de meilleures façons?
Vous pouvez écrire une fonction de test qui transmet un événement simulé à votre fonction de déclenchement. Voici un exemple qui teste une fonction de déclenchement onEdit()
. Il transmet un objet événement avec toutes les informations décrites pour "Spreadsheet Edit Events" dans nderstanding Events .
Pour l'utiliser, définissez votre point d'arrêt dans votre fonction cible onEdit
, sélectionnez la fonction test_onEdit
Et appuyez sur Debug
.
/**
* Test function for onEdit. Passes an event object to simulate an edit to
* a cell in a spreadsheet.
*
* Check for updates: https://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*/
function test_onEdit() {
onEdit({
user : Session.getActiveUser().getEmail(),
source : SpreadsheetApp.getActiveSpreadsheet(),
range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
authMode : "LIMITED"
});
}
Si vous êtes curieux, cela a été écrit pour tester la fonction onEdit
pour Feuille de calcul Google conditionnelle à trois cellules .
Voici une fonction de test pour les événements de soumission de formulaire de feuille de calcul. Il construit son événement simulé en lisant les données de soumission du formulaire. Cela a été écrit à l'origine pour Obtenir TypeError dans le déclencheur onFormSubmit? .
/**
* Test function for Spreadsheet Form Submit trigger functions.
* Loops through content of sheet, creating simulated Form Submit Events.
*
* Check for updates: https://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*/
function test_onFormSubmit() {
var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
var data = dataRange.getValues();
var headers = data[0];
// Start at row 1, skipping headers in row 0
for (var row=1; row < data.length; row++) {
var e = {};
e.values = data[row].filter(Boolean); // filter: https://stackoverflow.com/a/19888749
e.range = dataRange.offset(row,0,1,data[0].length);
e.namedValues = {};
// Loop through headers to create namedValues object
// NOTE: all namedValues are arrays.
for (var col=0; col<headers.length; col++) {
e.namedValues[headers[col]] = [data[row][col]];
}
// Pass the simulated event to onFormSubmit
onFormSubmit(e);
}
}
Lors de la simulation d'événements, veillez à faire correspondre les objets d'événement documentés aussi près que possible.
Si vous souhaitez valider la documentation, vous pouvez enregistrer l'événement reçu depuis votre fonction de déclenchement.
Logger.log( JSON.stringify( e , null, 2 ) );
Dans les événements de soumission sous forme de feuille de calcul:
values
saute les réponses vides (dans "nouveaux formulaires" + "nouvelles feuilles"). La méthode filter(Boolean)
est utilisée pour simuler ce comportement.*Une cellule au format "texte brut" conservera la date sous forme de chaîne et n'est pas une bonne idée.
Mise à jour 2017: Déboguez le Objets d'événement avec Stackdriver Logging pour le script Google Apps. Dans la barre de menus de l'éditeur de script, goto: View > Stackdriver Logging
pour afficher ou diffuser les journaux.
console.log () écrira DEBUG
messages de niveau
Exemple onEdit () :
function onEdit (e) {
var debug_e = {
authMode: e.authMode,
range: e.range.getA1Notation(),
source: e.source.getId(),
user: e.user,
value: e.value,
oldValue: e. oldValue
}
console.log({message: 'onEdit() Event Object', eventObject: debug_e});
}
Exemple onFormSubmit () :
function onFormSubmit (e) {
var debug_e = {
authMode: e.authMode,
namedValues: e.namedValues,
range: e.range.getA1Notation(),
value: e.value
}
console.log({message: 'onFormSubmit() Event Object', eventObject: debug_e});
}
Exemple onChange () :
function onChange (e) {
var debug_e = {
authMode: e.authMode,
changeType: changeType,
user: e.user
}
console.log({message: 'onChange() Event Object', eventObject: debug_e});
}
Vérifiez ensuite les journaux dans Stackdriver UI étiquetés comme la chaîne message
pour voir la sortie