J'essaie de comprendre la possibilité de remplacer certaines de mes feuilles de calcul Microsoft Excel par Google Doc Spreadsheets. Comment créer un raccourci clavier vers une fonction de script d'application Google dans une feuille de calcul Google Documents? C’est quelque chose que je fais couramment avec VBA et Excel.
Le script d'applications expose uniquement les événements côté serveur . Malheureusement, vous ne pouvez pas enregistrer les événements côté client tels que les coups de clavier aujourd'hui. Veuillez enregistrer un problème dans notre suivi des problèmes
Ceci est désormais pris en charge dans les feuilles (voir https://issuetracker.google.com/issues/36752620 ), mais pas encore dans Google Documents. Voir et star https://issuetracker.google.com/issues/36752620 pour le support de Google Documents
Très récemment (avril 2018), Google a lancé un enregistreur de macros qui permet notamment d’attribuer un raccourci clavier pour déclencher une macro et d’importer des scripts existants sous forme de macros. Voir Macros Google Sheets
REMARQUE: Cette fonctionnalité est en cours de déploiement et pourrait donc prendre quelques semaines à être disponible pour tous. Dans mon cas, il était d'abord disponible sur mon compte Google personnel et depuis hier, il est disponible sur l'un de mes comptes G Suite.
Une solution a été postée sur numéro 306 ! Pour les paresseux, le voici:
Le nouveau mode IFRAME dans HtmlService permet de transmettre les codes de clé aux modules complémentaires.
$(document).keydown(function(e){
//CTRL + V keydown combo
if(e.ctrlKey && e.keyCode == 86){
$( '#output' ).html("I've been pressed!");
}
})
Il faut d'abord cliquer sur/activer la barre latérale pour que cela se produise.
En mettant à jour, il est maintenant possible de contourner le problème mentionné par The Guy, via IFRAME, vous pouvez créer une barre latérale, un STUB juste pour entrer des commandes au clavier, les traiter avec jquery et exécuter la fonction appropriée déjà utilisée.
Excellente nouvelle :) Vous pouvez créer des raccourcis clavier personnalisés pour les fonctions de script de l'application Google en procédant comme suit:
N'oubliez pas que les fonctions macro ne doivent prendre aucun argument et ne renvoyer aucune valeur. Plus d'infos sur https://developers.google.com/apps-script/guides/sheets/macros#importing_functions_as_macros
Une solution possible consiste à dédier une colonne au "texte de déclenchement", à définir différents déclencheurs basés sur le texte pour chaque action que vous tentez d'effectuer, puis à créer une fonction qui vérifie la valeur et effectue une action en fonction du " déclencher le texte ". Vous pouvez ensuite définir un déclencheur d'événement onEdit dans les déclencheurs du projet sous "Ressources" dans l'éditeur de script pour votre fonction de raccourci clavier.
Le plus gros inconvénient de cette approche est qu’il faut (du moins pour moi) environ 7 secondes complètes au déclencheur onEdit pour détecter le changement et effectuer la mise à jour. Si vous souhaitez que quelque chose soit traité plus rapidement, vous devrez peut-être rechercher une autre approche.
J'ai fourni un exemple ci-dessous expliquant comment modifier la couleur d'une ligne en fonction du texte du déclencheur dans une colonne "déclencheur" désignée. Vous pouvez utiliser ceci pour effectuer tout ce qui peut être fait sur la feuille via un script, tel que modifier des valeurs, définir le poids de la police, copier des données ou même exécuter d'autres fonctions après avoir vérifié la saisie du texte de déclenchement.
/*you will need to add an onEdit trigger to your project
for this to run when you edit the cell*/
//function to update row color using entered text in a specified "trigger" column
function hotKey(){
//get the cell you edited and the associated column and row number
var cell = sheet.getActiveCell();
var thisCol = cell.getColumn();
var thisRow = cell.getRow();
//set a range variable for the entire row
var colorRow = sheet.getRange(thisRow,thisCol,1,Cols);
//get the edited value for the cell as a string
var val = cell.getValue().toString();
//check that the edited cell is in the trigger column
if (thisCol = 1){
//update the row color based on the entered value
if(val == "g"){
colorRow.setBackground("#00ff00"); //sets row color to green
cell.clearContent(); //delete the trigger cell value
}else if(val == "r"){
colorRow.setBackground("#ff0000");
cell.clearContent();
}else if(val == "fd"){
colorRow.setBackground("#fff2cc");
cell.clearContent();
}else if(val == "pr"){
colorRow.setBackground("#ffff00");
cell.clearContent();
}else if(val == "cn"){
colorRow.setBackground("#6fa8dc");
cell.clearContent();
}
}
}
Je suis aux prises avec un problème similaire mais je n'ai pas encore résolu le problème. Je pense qu'un moyen d'avancer peut être trouvé grâce à ce gestionnaire d'événements keypress sous Class Textbox .
Je ne sais pas si cela résout le problème du côté serveur, mais Arun l'a fait remarquer, mais je l'espère bien. N'hésitez pas à corriger mon raisonnement avant de perdre trop de temps à essayer cela! :)
Bref récit: écrivez un service html qui utilise un gestionnaire d’événement de frappe pour capturer les événements de frappe et les compare aux raccourcis clavier souhaités, puis appelle la sous-routine appropriée côté serveur dans le script apps pour aligner les raccourcis, le format ou changements de document.
En ce qui concerne la viabilité, pas aussi facile que la vba que vous connaissez déjà, mais une fois que vous avez dépassé les différentes façons de faire les choses, ce n’est pas vraiment si difficile.