Les résultats du script Java ne s'affichent pas en HTML

Nov 30 2020

J'ai écrit un code GAS pour vérifier si l'employé est ou non (en extrayant des données de feuilles Google). Le journal de la console me donne la bonne réponse mais lorsque je clique sur le bouton, la réponse n'apparaît pas sur le front-end. Pouvez-vous m'aider à résoudre les problèmes liés à mon erreur?

<div>
<script>
 function onStatus(notify) { 
 
 var employee = "John Peter";
 
 var ss = SpreadsheetApp.getActiveSpreadsheet();        
 var mainSheet = ss.getSheetByName("MAIN");
 var data = mainSheet.getDataRange().getValues();
 
 
   for (var j = 0; j < data.length; j++){
    var row = data[j];
    var mainSheet2 = row[4];
    var mainSheet3 = row[0];
    var status = (mainSheet2 =="IN" && mainSheet3 == employee) ; 
    if (status == true){
      var notify = employee +" You Are In"
      
      return notify;
 
  }
      }
document.getElementById('status').innerHTML= notify;       
      }
     
    </script>
<button onclick="onStatus()">Check Status</button>

 <font color='Green' id="status" ></font>
</div>

Réponses

4 Diego Nov 30 2020 at 10:49

Google fournit un très bon guide de communication client-serveur que je vous suggère fortement de lire pour mieux comprendre comment cela fonctionne.

Vous ne pouvez pas mettre de code de script d'application (par exemple SpreadsheetApp.getActiveSpreadsheet()) dans vos scripts frontend. Ce code doit être exécuté par le serveur de script des applications dans le backend et vous l'appellerez ensuite à l'aide d'un google.script.runappel.

Code.gs

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function checkStatus() { 
  var employee = "John Peter";
  var ss = SpreadsheetApp.getActiveSpreadsheet();        
  var mainSheet = ss.getSheetByName("MAIN");
  var data = mainSheet.getDataRange().getValues();
  
  for (var j = 0; j < data.length; j++){
    var row = data[j];
    var mainSheet2 = row[4];
    var mainSheet3 = row[0];
    var status = (mainSheet2 =="IN" && mainSheet3 == employee) ; 
    if (status == true){
      return employee + " You Are In";
    }
  }
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <div>
      <button onclick="onStatus()">Check Status</button>
      <font color='Green' id="status" ></font>
    </div>

    <script>
      function onStatus() {
        google.script.run
          .withSuccessHandler(updateStatus) // Send the backend result to updateStatus()
          .checkStatus(); // Call the backend function
      }
  
      function updateStatus(notify) {
        document.getElementById('status').innerHTML= notify;
      }
    </script>
  </body>
</html>