0
votes

Tri des données de table onclick dans le script Google-App

J'essaie de trier les données (ASC ou DESC) dans le tableau. Pour celui-ci, je veux trier la date de vl & date / heure d'application chaque fois que je clique sur chaque en-tête. Cependant, mon code actuel ne fait rien chaque fois que je clique. Mais quand je l'ai essayé sur une donnée statique, cela fonctionne.

Voici mon code ci-dessous: P>

    <? var data = SpreadsheetApp
        .openById('sheet ID')
        .getSheetByName("VL Request")
        .getDataRange()
        .getValues(); 
   var timeStamp = [0];      
   var rid = [1];     
   var ldap = [2];
   var aname = [7];
   var lob = [9];
   var dovl = [5];
   var rol = [6];
   var tlapprov = [12];
   var tlrem = [14];
   var stat = [13];
   var schedrem = [11];
   var tl = [3];
   var pocldap = [15];
   var omldap = [16];
   var userName = Session.getEffectiveUser().getUsername();
  ?>
     <table id="vllist" class="vllist2">

       <tr>
           <th colspan=11>POC VIEW</th>    
       </tr> 
    <tr>
           <th colspan=11>Application for Date Range: <?= [formattedStart] ?> - <?= [formattedEnd] ?></th>    
       </tr>   
      <tr>
        <th style="display:none;">Request ID</th>   
        <th>LDAP</th>
        <th>Agent Name</th>
        <th>Lane</th>  
        <th onclick="sortTable(4)">Date of VL</th>
        <th>Reason of Leave</th>
        <th>POC Approval</th>
        <th>POC Remarks</th>
        <th>Scheduler's Approval</th>
        <th>Scheduler's Remarks</th>
        <th onclick="sortTable(10)">Date/Time of Application</th>
      </tr>

     <? for (var i = 1; i < data.length; i++) { ?>
            <tr> 
            <? if ((data[i][tlapprov] === "Pending") && ((data[i][pocldap] === userName) || (data[i][omldap] === userName)) && (data[i][dovl] >= startDate) && (data[i][dovl] <= endDate)) { ?>

            <?
            var vldate = data[i][dovl];
            var formattedDateVL = (vldate.getMonth()+1) + '/' + vldate.getDate() + '/' + vldate.getYear();
            ?>

              <td class="hide">
                <?= data[i][rid] ?>
                </td>
                <td>
                <?= data[i][ldap] ?>
                </td>
                <td>
                <?= data[i][aname] ?>
                </td>
                <td>
                <?= data[i][lob] ?>
                </td>
                <td>
                <?= [formattedDateVL] ?>
                </td>
                <td>
                <?= data[i][rol] ?>
                </td>
                <td>
                <?= data[i][tlapprov] ?>
                </td>
                <td>
                <?= data[i][tlrem] ?>
                </td>
                <td>
                <?= data[i][stat] ?>
                </td>
                <td>
                <?= data[i][schedrem] ?>
                </td>
                <td class="lefttext">
                <?= data[i][timeStamp] ?>
                </td>

                <? } ?>
            </tr>
            <? } ?>

    </table> 

<script>
function sortTable(n) {
  var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
  table = document.getElementById("vllist");
  switching = true;
  dir = "asc";

  while (switching) {

    switching = false;
    rows = table.rows;

    for (i = 1; i < (rows.length - 1); i++) {

      shouldSwitch = false;

      x = rows[i].getElementsByTagName("TD")[n];
      y = rows[i + 1].getElementsByTagName("TD")[n];

      if (dir == "asc") {
        if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {

          shouldSwitch = true;
          break;
        }
      } else if (dir == "desc") {
        if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {

          shouldSwitch = true;
          break;
        }
      }
    }
    if (shouldSwitch) {

      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;

      switchcount ++;
    } else {

      if (switchcount == 0 && dir == "asc") {
        dir = "desc";
        switching = true;
      }
    }
  }
}
</script>


1 commentaires

Cela ressemble à un code côté serveur et du code côté client tous mélangés. Ça ne va pas fonctionner. Je vous recommanderais d'essayer certains des tutoriels de démarrage rapide afin d'apprendre des bases. Essayez d'aller ici et faites une certaine lecture.


3 Réponses :


0
votes

Ce que je ferais, c'est appeler les données dans la table comme normale ... puis utilisez JS pour trier les enregistrements de la table HTML.

Je pense que ce que vous essayiez de faire est de trier les données alphabétiquement, puis affichez les données dans la table. Donc, placez plutôt les données comme dans la table, utilisez une fonction de table de tri .. p>

p>

<p><strong>Click the headers to sort the table.</strong></p>
<p>The first time you click, the sorting direction is ascending (A to Z).</p>
<p>Click again, and the sorting direction will be descending (Z to A):</p>

<table id="myTable">
  <tr>
   <!--When a header is clicked, run the sortTable function, with a parameter, 0 for sorting by names, 1 for sorting by country:-->  
    <th onclick="sortTable(0)">Name</th>
    <th onclick="sortTable(1)">Country</th>
  </tr>
  <tr>
    <td>Berglunds snabbkop</td>
    <td>Sweden</td>
  </tr>
  <tr>
    <td>North/South</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Koniglich Essen</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Italy</td>
  </tr>
  <tr>
    <td>Paris specialites</td>
    <td>France</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Canada</td>
  </tr>
</table>


3 commentaires

En fait, c'est le script que j'utilise, mais cela ne fonctionne pas si les données proviennent de la feuille de calcul.


Vous voyez le problème est que php est le côté serveur qu'un JS est le côté du client. Mélanger les deux que la JS essaie de trier quelque chose qui n'existe pas encore du côté du client ... La solution consisterait à mettre les données dans JSON en utilisant $ JSON_DATA = JSON_ENCODE ($ données); Utilisez ensuite JavaScript pour rendre la table de JSON à l'aide de var données = JSON.PARSE ('<< Imprimer_R ($ JSON_DATA);?>'); Puis appliquez le script de tri


au lieu de mettre des valeurs de PHP directement dans la table comme Utilisez document.getelementByID ('TD1'). innerhtml = Données [0] [Schedem] de la Javascript json var



0
votes

Voici une solution simple pour pouvoir trier dans une feuille de calcul en cliquant sur Cocher sur les cases au-dessus de la ligne d'en-tête.

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()=='Sheet1') {
    if(e.range.rowStart==1 && e.range.columnStart<=sh.getLastColumn()) {
      sh.getRange(3,1,sh.getLastRow()-1,sh.getLastColumn()).sort({column:e.range.columnStart,asc:(e.value=="TRUE")?true:false});
    }
  }
}


7 commentaires

Désolé, je ne sais pas si je comprends bien. Donc, si je clique sur un en-tête dans la table HTML, je vais simplement appeler la fonction et la feuille de calcul réelle sera triée?


Dans cette situation. Si vous cliquez sur la case à cocher ci-dessus de l'en-tête, cela émettra un déclencheur onedit qui appellera la fonction onedit (e) et effectuera les opérations dans la fonction qui triera la table.


Le faire avec un HTML est un peu plus compliqué mais réalisable.


Je pense que s'il est possible que les données de la feuille de calcul ne soient pas déplacées mais trichées uniquement dans la table HTML uniquement pour la visualisation?


Eh bien, c'est vraiment difficile de dire ce que vous voulez car vous avez le côté du serveur et le code côté client tous mélangés.


Je fournisais simplement une alternative simple à quelqu'un qui semble être nouveau dans les scripts de Google Apps.


Vous pouvez faire tout votre côté client si vous le souhaitez avec JavaScript uniquement.



0
votes

Selon le meilleures pratiques pour UI avec des applications Script, vous devriez Chargez vos données de manière asynchrone . < P> Pour vous montrer comment faire cela + Pour créer une fonction de tri correcte pour vous, j'ai créé la feuille d'échantillonnage suivante:

 exemplaire

Code.gs xxx

page.html xxx


0 commentaires