5 votes

Capture de onSelectionChange dans le côté frontal pour un module complémentaire Google Sheets

Dans Google Sheets, j'ai un add-on qui se compose de deux parties : le back-end code.gs et front-end index.html où l'index.html est une barre latérale affichée lors d'un clic dans le menu. Voici code.gs :

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('My add-on')
    .addItem('Test', 'openSideBar')    
    .addToUi();
}

function onSelectionChange(e) {
  Logger.log("Selection changed ");     
}

function openSideBar() {
  var html = HtmlService.createHtmlOutputFromFile('Index');
  SpreadsheetApp.getUi().showSidebar(html);
}

function getCurrentSelection() {
  var currentCell = SpreadsheetApp.getCurrentCell();

  return { column: currentCell.getColumn(), row: currentCell.getRow() };
}

Voici la documentation pour onSelectionChange . Le site Logger.log("Selection changed") est en effet appelé lorsque la sélection est modifiée. Mais, j'ai besoin de notifier ou de faire un changement dans le côté frontal lorsque l'utilisateur clique sur une cellule et change la sélection.

Voici le index.html :

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
</head>
<body>
    Test
    <input type="text" id="formula" />
    <script>
      function onSelectionChangeJs(e) {
        document.getElementById("formula").value = e ; 
      }

      function loadCell() {
        google.script.run.withSuccessHandler(onSelectionChangeJs).getCurrentSelection(); 
      }
    </script>
    <button onclick="loadCell()">Get cell</button>
</body>
</html>

Alors qu'actuellement je vérifie la sélection actuelle lors d'un clic sur un bouton, j'ai besoin de onSelectionChangeJs pour être appelé automatiquement lorsqu'une sélection est modifiée dans la feuille.

Je pense qu'il s'agit d'un besoin commun pour le développement d'un add-on. Alors, quelqu'un sait-il comment laisser onSelectionChange de code.gs informer onSelectionChangeJs de index.html ?

0voto

Jason Torpy Points 100

On dirait que lorsqu'un utilisateur modifie une cellule dans Sheets, vous voulez que ce changement soit reflété dans une page HTML, non ? Pourquoi ne pas envoyer cette valeur au HTML ? Cela nécessiterait de rafraîchir la page HTML je pense, mais vous pourriez reconstruire avec ce nouveau paramètre. Je ne connais pas assez le module complémentaire pour en dire plus. Mais si vous avez un onSelectionChange() déclenchant Logger.log uniquement. Il pourrait déclencher une fonction qui rafraîchit le HTML avec e inséré dans l'id html "formule". Vous ne pouvez pas modifier le js directement avec le code, mais vous pouvez écrire le code.gs qui fait la même chose que le js html. Cela va-t-il dans le sens de ce dont vous avez besoin ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X