|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

App inventor 2 en español
Cómo programar los teléfonos móviles con Android.
Curso de App inventor 2 en español - Juan Antonio Villalpando

-- Tutorial de iniciación de App Inventor 2 en español --

Volver al índice del tutorial

___________________________

170F.- TableView. Visor de Tabla con JavaScript.

p170F_JavaScriptTablaCSS.aia

- Tablas mediante JavaScript.

1.- Tabla.

javascript/tablacss.htm

tablacss.htm

<!DOCTYPE html>
<html>
<head>
  <title>Table with CSS</title>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
   Click on a cell.<br><br>
  <div id="table-container"></div>

  <script>
    var string = "1,2,3,4\n5,6,7,8\n9,10,11,12\n13,14,15,16";
    var rows = string.split("\n");
    var table = document.createElement("table");

    var headerRow = document.createElement("tr");
    var headerCell1 = document.createElement("th");
    var headerCell2 = document.createElement("th");
    var headerCell3 = document.createElement("th");
    var headerCell4 = document.createElement("th");
    headerCell1.appendChild(document.createTextNode("Column 1"));
    headerCell2.appendChild(document.createTextNode("Column 2"));
    headerCell3.appendChild(document.createTextNode("Column 3"));
    headerCell4.appendChild(document.createTextNode("Column 4"));
    headerRow.appendChild(headerCell1);
    headerRow.appendChild(headerCell2);
    headerRow.appendChild(headerCell3);
    headerRow.appendChild(headerCell4);
    table.appendChild(headerRow);

    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].split(",");
      var row = document.createElement("tr");
      if (i % 2 == 0) {
        row.style.backgroundColor = "#d1f0d1";
      } else {
        row.style.backgroundColor = "#ffdede";
      }
      for (var j = 0; j < cols.length; j++) {
        var cell = document.createElement("td");
        cell.appendChild(document.createTextNode(cols[j]));
        cell.addEventListener("click", function() {
          alert(this.innerHTML);
        });
        row.appendChild(cell);
      }
      table.appendChild(row);
    }

    document.getElementById("table-container").appendChild(table);
  </script>
</body>
</html>

- Cambiando estas líneas lo adaptamos a App Inventor:

tablacss.htm

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
(...)
 // var string = "1,2,3,4\n5,6,7,8\n9,10,11,12\n13,14,15,16";
	var string =  window.AppInventor.getWebViewString(); // INPUT
(...)
      // alert(rowContent);
	    window.AppInventor.setWebViewString(rowContent); // OUTPUT

2.- Mostrar una fila.

- Cuando hacemos Clic, obtenemos toda la fila.

/javascript/tablacss_row.htm

tablacss_row.htm

<!DOCTYPE html>
<html>
<head>
  <title>Table with CSS</title>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
   Click on a cell.<br><br>
  <div id="table-container"></div>

  <script>
    var string = "1,2,3,4\n5,6,7,8\n9,10,11,12\n13,14,15,16";
    var rows = string.split("\n");
    var table = document.createElement("table");

    var headerRow = document.createElement("tr");
    var headerCell1 = document.createElement("th");
    var headerCell2 = document.createElement("th");
    var headerCell3 = document.createElement("th");
    var headerCell4 = document.createElement("th");
    headerCell1.appendChild(document.createTextNode("Column 1"));
    headerCell2.appendChild(document.createTextNode("Column 2"));
    headerCell3.appendChild(document.createTextNode("Column 3"));
    headerCell4.appendChild(document.createTextNode("Column 4"));
    headerRow.appendChild(headerCell1);
    headerRow.appendChild(headerCell2);
    headerRow.appendChild(headerCell3);
    headerRow.appendChild(headerCell4);
    table.appendChild(headerRow);

    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].split(",");
      var row = document.createElement("tr");
      if (i % 2 == 0) {
        row.style.backgroundColor = "#d1f0d1";
      } else {
        row.style.backgroundColor = "#ffdede";
      }
for (var j = 0; j < cols.length; j++) {
        var cell = document.createElement("td");
        cell.appendChild(document.createTextNode(cols[j]));
        row.appendChild(cell);
      }
      row.addEventListener("click", function() {
        var rowContent = "";
        for (var k = 0; k < this.cells.length; k++) {
          rowContent += this.cells[k].innerHTML + "|";
        }
        alert(rowContent);
      });
      table.appendChild(row);
    }
	
    document.getElementById("table-container").appendChild(table);
  </script>
</body>
</html>

 

3.- Ordena la tabla cuando pulsa en la cabecera de las columnas.

javascript/tablacss_sort.htm

tablacss_sort.htm

<!DOCTYPE html>
<html>
<head>
  <title>Tabla con CSS y ordenamiento</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
  Click on a header.<br><br>
  <div id="table-container"></div>

  <script>
    var string = "Fernando,33,Granada,4\nAntonio,66,Sevilla,3\nLuis,55,Cadiz,2\nCarlos,44,Cordoba,1";
    var rows = string.split("\n");
    var table = document.createElement("table");

    var headerRow = document.createElement("tr");
    var headerCell1 = document.createElement("th");
    var headerCell2 = document.createElement("th");
    var headerCell3 = document.createElement("th");
    var headerCell4 = document.createElement("th");
    headerCell1.appendChild(document.createTextNode("Columna 1"));
    headerCell2.appendChild(document.createTextNode("Columna 2"));
    headerCell3.appendChild(document.createTextNode("Columna 3"));
    headerCell4.appendChild(document.createTextNode("Columna 4"));
    headerCell1.addEventListener("click", function() { sortTable(0); });
    headerCell2.addEventListener("click", function() { sortTable(1); });
    headerCell3.addEventListener("click", function() { sortTable(2); });
    headerCell4.addEventListener("click", function() { sortTable(3); });
    headerRow.appendChild(headerCell1);
    headerRow.appendChild(headerCell2);
    headerRow.appendChild(headerCell3);
    headerRow.appendChild(headerCell4);
    table.appendChild(headerRow);

    var data = [];
    var firstRowColor = "#d1f0d1"; // color of the first row after the header
    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].split(",");
      data.push(cols);
      var row = document.createElement("tr");
      if (i === 0) {
        row.style.backgroundColor = firstRowColor;
      } else {
        row.style.backgroundColor = i % 2 === 0 ? firstRowColor : "#ffdede";
      }
      for (var j = 0; j < cols.length; j++) {
        var cell = document.createElement("td");
        cell.appendChild(document.createTextNode(cols[j]));
        row.appendChild(cell);
      }
      row.addEventListener("click", function() {
        var rowContent = "";
        for (var k = 0; k < this.cells.length; k++) {
          rowContent += this.cells[k].innerHTML + "|";
        }
         alert(rowContent);
      });
      table.appendChild(row);
    }

    document.getElementById("table-container").appendChild(table);

function sortTable(col) {
  var rows = table.rows;
  var switching = true;
  var shouldSwitch = false;
  var i = 1;
  var even = true;
  while (switching) {
    switching = false;
    for (var j = 1; j < (rows.length - 1); j++) {
      shouldSwitch = false;
      var x = rows[j].getElementsByTagName("td")[col];
      var y = rows[j + 1].getElementsByTagName("td")[col];
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      rows[j].parentNode.insertBefore(rows[j + 1], rows[j]);
      switching = true;
    }
  }
  // Alternate color background row.
  for (var k = 1; k < rows.length; k++) {
    if (k % 2 === 0) {
      rows[k].style.backgroundColor = "#d1f0d1";
    } else {
      rows[k].style.backgroundColor = "#ffdede";
    }
  }
}

  </script>
</body>
</html>

4.- Con imágenes.

p170F_JavaScriptTablaCSS_v2.aia

javascript/tablacss_sort_image.htm

tablacss_sort_image.htm

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
  <title>Tabla con CSS y ordenamiento</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
  Click on a header.<br><br>
  <div id="table-container"></div>
  <script>
    // var string = "<img src='perro_50t.png'>,Perro,33,04\n
<img src='gato_50t.png'>,Gato,66,03\n<img src='pajaro_50t.png'>,
Pájaro,55,02\n<img src='cerdo_50t.png'>,Cerdo,44,01\n<img src='raton_50t.png'>,
Ratón,77,05\n<img src='elefante_50t.png'>,Elefante,22,06\n<img src='vaca_50t.png'>,
Vaca,33,07\n<img src='jirafa_50t.png'>,Jirafa,44,08\n<img src='buho_50t.png'>,Buho,
55,09\n<img src='mono_50t.png'>,Mono,66,10\n<img src='cebra_50t.png'>,Cebra,77,11";
	var string =  window.AppInventor.getWebViewString(); // INPUT
    var rows = string.split("\n");
    var table = document.createElement("table");

    var headerRow = document.createElement("tr");
    var headerCell1 = document.createElement("th");
    var headerCell2 = document.createElement("th");
    var headerCell3 = document.createElement("th");
    var headerCell4 = document.createElement("th");
    headerCell1.appendChild(document.createTextNode("Columna 1"));
    headerCell2.appendChild(document.createTextNode("Columna 2"));
    headerCell3.appendChild(document.createTextNode("Columna 3"));
    headerCell4.appendChild(document.createTextNode("Columna 4"));
    headerCell1.addEventListener("click", function() { sortTable(0); });
    headerCell2.addEventListener("click", function() { sortTable(1); });
    headerCell3.addEventListener("click", function() { sortTable(2); });
    headerCell4.addEventListener("click", function() { sortTable(3); });
    headerRow.appendChild(headerCell1);
    headerRow.appendChild(headerCell2);
    headerRow.appendChild(headerCell3);
    headerRow.appendChild(headerCell4);
    table.appendChild(headerRow);

    var data = [];
    var firstRowColor = "#d1f0d1"; // color of the first row after the header
    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].split(",");
      data.push(cols);
      var row = document.createElement("tr");
      if (i === 0) {
        row.style.backgroundColor = firstRowColor;
      } else {
        row.style.backgroundColor = i % 2 === 0 ? firstRowColor : "#ffdede";
      }
      for (var j = 0; j < cols.length; j++) {
        var cell = document.createElement("td");
	
	 if (cols[j].startsWith("<img")) {
		cell.innerHTML = cols[0];
      } else {
		cell.appendChild(document.createTextNode(cols[j]));
      }
		row.appendChild(cell);
      }
      row.addEventListener("click", function() {
        var rowContent = "";
        for (var k = 0; k < this.cells.length; k++) {
          rowContent += this.cells[k].innerHTML + "|";
        }
        // alert(rowContent);
		 window.AppInventor.setWebViewString(rowContent); // OUTPUT
      });
      table.appendChild(row);
    }

    document.getElementById("table-container").appendChild(table);

function sortTable(col) {
  var rows = table.rows;
  var switching = true;
  var shouldSwitch = false;
  var i = 1;
  var even = true;
  while (switching) {
    switching = false;
    for (var j = 1; j < (rows.length - 1); j++) {
      shouldSwitch = false;
      var x = rows[j].getElementsByTagName("td")[col];
      var y = rows[j + 1].getElementsByTagName("td")[col];
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      rows[j].parentNode.insertBefore(rows[j + 1], rows[j]);
      switching = true;
    }
  }
  // Alternate color background row.
  for (var k = 1; k < rows.length; k++) {
    if (k % 2 === 0) {
      rows[k].style.backgroundColor = "#d1f0d1";
    } else {
      rows[k].style.backgroundColor = "#ffdede";
    }
  }
}

  </script>
</body>
</html>

5.- Ordenadar tabla, alfabéticamente y alrevés.

p170F_JavaScriptTablaCSS_v3.aia

javascript/tablacss_orden.htm

tablacss_orden.htm

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Tabla ordenable</title>
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
    }
    th, td {
      text-align: left;
      padding: 8px;
      cursor: pointer;
      border: 1px solid black;
    }
    th {
      background-color: #4CAF50;
      color: white;
    }
    tr:nth-child(even) {
      background-color: #c8f7c5;
    }
    tr:nth-child(odd) {
      background-color: #f7c5c5;
    }
    .headerSortUp:after,
    .headerSortDown:after {
      content: ' ';
      position: relative;
      left: 5px;
    }
    .headerSortUp:after {
      border-bottom: 8px solid #fff;
      border-left: 5px solid transparent;
      border-right: 5px solid transparent;
    }
    .headerSortDown:after {
      border-top: 8px solid #fff;
      border-left: 5px solid transparent;
      border-right: 5px solid transparent;
    }
  </style>
  <script>
    function sortTable(n) {
      var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
      table = document.getElementById("myTable");
      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;
          }
        }
      }
      // Add CSS classes to indicate sorting direction
      var th = table.getElementsByTagName("TH");
      for (i = 0; i < th.length; i++) {
        th[i].classList.remove("headerSortUp");
        th[i].classList.remove("headerSortDown");
      }
      if (dir == "asc") {
        th[n].classList.add("headerSortUp");
      } else if (dir == "desc") {
        th[n].classList.add("headerSortDown");
      }
      // Alternate row colors
      var rows = table.getElementsByTagName("TR");
      for (i = 0; i < rows.length; i++) {
        var color = i % 2 == 0 ? "#f7c5c5" : "#c8f7c5";
        rows[i].style.backgroundColor = color;
      }
    }

    function createTable(data) {
      var rows = data.split("\n");
      var table = "<table id='myTable'>";
      table += "<thead><tr>";
      table += "<th onclick='sortTable(0)'>Nombre</th>";
      table += "<th onclick='sortTable(1)'>Edad</th>";
      table += "<th onclick='sortTable(2)'>Ciudad</th>";
      table += "<th onclick='sortTable(3)'>Código postal</th>";
      table += "</tr></thead>";
      table += "<tbody>";
      for (var i = 0; i < rows.length; i++) {
        var cells = rows[i].split(",");
        var color = i % 2 == 0 ? "#f7c5c5"  : "#c8f7c5";
        table += "<tr style='background-color: " + color + "'>";
        for (var j = 0; j < cells.length; j++) {
          table += "<td>" + cells[j] + "</td>";
        }
        table += "</tr>";
      }
      table += "</tbody></table>";
      return table;
    }

    window.onload = function() {
      var data = "Fernando,33,Granada,04\nAntonio,66,Sevilla,03\nLuis,55,Cádiz,02\nCarlos,44,Córdoba,01\nRicardo,77,Huelva,05";
      var table = createTable(data);
      document.getElementById("tableContainer").innerHTML = table;
    };
  </script>
</head>
<body>
  <div id="tableContainer"></div>
</body>
</html>

6.- Gráfico.

p170F_JavaScriptTablaCSS_v4.aia

javascript/grafica.htm

- Lo adaptamos a App Inventor modificando estas líneas.

grafica.htm

 // Obtener los valores de Y y X
	  // var yValues = "10,40,03,20,60,40,30,60,29,70";
	  // var xValues = "1,2,3,4,5,6,7,8,9,10";
		var string =  window.AppInventor.getWebViewString().split("|"); // INPUT
		var yValues = string[0];
		var xValues = string[1];
(...)

7.- Ordenadar tabla, alfabéticamente y alrevés. Click sobre una fila.

javascript/tablacss_orden_clickrow.htm

tablacss_orden_clickrow.htm

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
  <title>Tabla con CSS y ordenamiento</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
  Click on a header.<br><br>
  <div id="table-container"></div>

  <script>
 var string = "Fernando,33,Granada,04\nAntonio,66,Sevilla,03\nLuis,55,Cádiz,02\nCarlos,44,Córdoba,01\nRicardo,77,Huelva,05";
var rows = string.split("\n");
var table = document.createElement("table");
var ascending = true;

var headerRow = document.createElement("tr");
var headerCell1 = document.createElement("th");
var headerCell2 = document.createElement("th");
var headerCell3 = document.createElement("th");
var headerCell4 = document.createElement("th");
headerCell1.appendChild(document.createTextNode("Column 1"));
headerCell2.appendChild(document.createTextNode("Column 2"));
headerCell3.appendChild(document.createTextNode("Column 3"));
headerCell4.appendChild(document.createTextNode("Column 4"));

// Agregar atributos data-sort-type a cada celda del encabezado
headerCell1.setAttribute("data-sort-type", "asc");
headerCell2.setAttribute("data-sort-type", "asc");
headerCell3.setAttribute("data-sort-type", "asc");
headerCell4.setAttribute("data-sort-type", "asc");

// Agregar event listener a cada celda del encabezado
headerCell1.addEventListener("click", function() { sortTable(0); });
headerCell2.addEventListener("click", function() { sortTable(1); });
headerCell3.addEventListener("click", function() { sortTable(2); });
headerCell4.addEventListener("click", function() { sortTable(3); });

headerRow.appendChild(headerCell1);
headerRow.appendChild(headerCell2);
headerRow.appendChild(headerCell3);
headerRow.appendChild(headerCell4);
table.appendChild(headerRow);

for (var i = 0; i < rows.length; i++) {
  var cols = rows[i].split(",");
  var row = document.createElement("tr");
  if (i % 2 == 0) {
    row.style.backgroundColor = "#d1f0d1";
  } else {
    row.style.backgroundColor = "#ffdede";
  }
  for (var j = 0; j < cols.length; j++) {
    var cell = document.createElement("td");
    cell.appendChild(document.createTextNode(cols[j]));
    row.appendChild(cell);
  }
  row.addEventListener("click", function() {
    var rowContent = "";
    for (var k = 0; k < this.cells.length; k++) {
      rowContent += this.cells[k].innerHTML + "|";
    }
    alert(rowContent);
  });
  table.appendChild(row);
}

document.getElementById("table-container").appendChild(table);

function sortTable(columnIndex) {
  var rows = Array.from(table.rows).slice(1); // exclude header row
  rows.sort(function(rowA, rowB) {
    var cellA = rowA.cells[columnIndex].textContent.trim();
    var cellB = rowB.cells[columnIndex].textContent.trim();

    if (cellA < cellB) {
      return ascending ? -1 : 1;
    } else if (cellA > cellB) {
      return ascending ? 1 : -1;
    } else {
      return 0;
    }
  });

  for (var i = table.rows.length - 1; i >= 1; i--) {
    table.deleteRow(i);
  }
  
  // re-insert sorted rows
  for (var i = 0; i < rows.length; i++) {
   var row = rows[i];
  // alternar color de fondo de la fila
  if (i % 2 == 0) {
		row.style.backgroundColor = "#d1f0d1";
	  } else {
		row.style.backgroundColor = "#ffdede";
	  }

  table.appendChild(row);
  }

  // toggle sort direction for next click
  ascending = !ascending;
}
  </script>
</body>
</html>

8.- Ordenar tabla de Google Sheet. PHP.

php/googlesheet5.php

googlesheet5.php

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
  <title>Tabla con CSS y ordenamiento</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
 <?php
$url_rango1 = "https://docs.google.com/spreadsheets/d/1M9Tfz0O1a0sBwze-hobrbmdEhvivwKITijj85WKWSqM/gviz/tq?tqx=out:csv&range=A1:B21&sheet=hoja1";
$url_rango2 = "https://docs.google.com/spreadsheets/d/1M9Tfz0O1a0sBwze-hobrbmdEhvivwKITijj85WKWSqM/gviz/tq?tqx=out:csv&range=D1:E21&sheet=hoja1";
		
// Descargar los datos del rango 1
$datos_rango1 = file_get_contents($url_rango1);
$filas_rango1 = str_getcsv($datos_rango1, "\n");

// Descargar los datos del rango 2
$datos_rango2 = file_get_contents($url_rango2);
$filas_rango2 = str_getcsv($datos_rango2, "\n");

// Unir los datos de ambos rangos
$datos_unidos = "";
for ($i = 0; $i < count($filas_rango1); $i++) {
    $datos_unidos .= $filas_rango1[$i] . "," . $filas_rango2[$i] . "\n";
}

// Imprimir los datos unidos
$datos_unidos  = rtrim($datos_unidos, "\n"); // Elimina último \n
$datos_unidos = str_replace('"', '', $datos_unidos); // Elimina "
 ?>
 
  Click on a header.<br><br>
  <div id="table-container"></div>

  <script>
 // var string = "Fernando,33,Granada,04\nAntonio,66,Sevilla,03\nLuis,55,Cádiz,02\nCarlos,44,Córdoba,01\nRicardo,77,Huelva,05";
    var string = <?php echo json_encode($datos_unidos);
	?>;

var rows = string.split("\n");
var table = document.createElement("table");
var ascending = true;

var headerRow = document.createElement("tr");
var headerCell1 = document.createElement("th");
var headerCell2 = document.createElement("th");
var headerCell3 = document.createElement("th");
var headerCell4 = document.createElement("th");
headerCell1.appendChild(document.createTextNode("Column 1"));
headerCell2.appendChild(document.createTextNode("Column 2"));
headerCell3.appendChild(document.createTextNode("Column 3"));
headerCell4.appendChild(document.createTextNode("Column 4"));

// Agregar atributos data-sort-type a cada celda del encabezado
headerCell1.setAttribute("data-sort-type", "asc");
headerCell2.setAttribute("data-sort-type", "asc");
headerCell3.setAttribute("data-sort-type", "asc");
headerCell4.setAttribute("data-sort-type", "asc");

// Agregar event listener a cada celda del encabezado
headerCell1.addEventListener("click", function() { sortTable(0); });
headerCell2.addEventListener("click", function() { sortTable(1); });
headerCell3.addEventListener("click", function() { sortTable(2); });
headerCell4.addEventListener("click", function() { sortTable(3); });

headerRow.appendChild(headerCell1);
headerRow.appendChild(headerCell2);
headerRow.appendChild(headerCell3);
headerRow.appendChild(headerCell4);
table.appendChild(headerRow);

for (var i = 0; i < rows.length; i++) {
  var cols = rows[i].split(",");
  var row = document.createElement("tr");
  if (i % 2 == 0) {
    row.style.backgroundColor = "#d1f0d1";
  } else {
    row.style.backgroundColor = "#ffdede";
  }
  for (var j = 0; j < cols.length; j++) {
    var cell = document.createElement("td");
    cell.appendChild(document.createTextNode(cols[j]));
    row.appendChild(cell);
  }
  row.addEventListener("click", function() {
    var rowContent = "";
    for (var k = 0; k < this.cells.length; k++) {
      rowContent += this.cells[k].innerHTML + "|";
    }
    alert(rowContent);
  });
  table.appendChild(row);
}

document.getElementById("table-container").appendChild(table);

function sortTable(columnIndex) {
  var rows = Array.from(table.rows).slice(1); // exclude header row
  rows.sort(function(rowA, rowB) {
    var cellA = rowA.cells[columnIndex].textContent.trim();
    var cellB = rowB.cells[columnIndex].textContent.trim();

if (cellA.localeCompare(cellB, 'es', { sensitivity: 'base' }) < 0) {
  return ascending ? -1 : 1;
} else if (cellA.localeCompare(cellB, 'es', { sensitivity: 'base' }) > 0) {
  return ascending ? 1 : -1;
} else {
  return 0;
}
  });


  for (var i = table.rows.length - 1; i >= 1; i--) {
    table.deleteRow(i);
  }
  
  // re-insert sorted rows
  for (var i = 0; i < rows.length; i++) {
   var row = rows[i];
  // alternar color de fondo de la fila
  if (i % 2 == 0) {
		row.style.backgroundColor = "#d1f0d1";
	  } else {
		row.style.backgroundColor = "#ffdede";
	  }

  table.appendChild(row);
  }

  // toggle sort direction for next click
  ascending = !ascending;
}
  </script>
</body>
</html>

9.- Ordenar tabla. Google Sheet. JavaScript.

p170F_JavaScriptTablaCSS_v5.aia

php/googlesheet8.htm

googlesheet8.htm

<!DOCTYPE html>
<html>
<head>
  <title>Tabla de Datos</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
    <style>
    table {
      border-collapse: collapse;
      width: 100%;
      max-width: 800px;
      margin: 0 auto;
    }
    th, td {
      padding: 8px;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    th {
      background-color: #f2f2f2;
    }
    tr:nth-child(even) {
      background-color: #d1f0d1;
    }
    tr:nth-child(odd) {
      background-color: #ffdede;
    }
  </style>
</head>
<body>
<div id="table-container"></div>

  <script>
// Obtener los datos de la hoja de cálculo y almacenarlos en la variable "datos"
var url = 'https://docs.google.com/spreadsheets/d/1M9Tfz0O1a0sBwze-hobrbmdEhvivwKITijj85WKWSqM/gviz/tq?tqx=out:csv&sheet=hoja1&range=A1:E21&tq=SELECT%20A,B,D,E';
var datos = '';
var ascending = true;

// Realizar la solicitud HTTP GET utilizando XMLHttpRequest
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = function() {
  if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
	datos = xhr.responseText;

	var string = datos;
	var rows = string.split("\n");
	var table = document.createElement("table");
	var ascending = false;

var headerRow = document.createElement("tr");
var headerCell1 = document.createElement("th");
var headerCell2 = document.createElement("th");
var headerCell3 = document.createElement("th");
var headerCell4 = document.createElement("th");
headerCell1.appendChild(document.createTextNode("Column 1"));
headerCell2.appendChild(document.createTextNode("Column 2"));
headerCell3.appendChild(document.createTextNode("Column 3"));
headerCell4.appendChild(document.createTextNode("Column 4"));

// Agregar atributos data-sort-type a cada celda del encabezado
headerCell1.setAttribute("data-sort-type", "asc");
headerCell2.setAttribute("data-sort-type", "asc");
headerCell3.setAttribute("data-sort-type", "asc");
headerCell4.setAttribute("data-sort-type", "asc");

// Agregar event listener a cada celda del encabezado
headerCell1.addEventListener("click", function() { sortTable(0); });
headerCell2.addEventListener("click", function() { sortTable(1); });
headerCell3.addEventListener("click", function() { sortTable(2); });
headerCell4.addEventListener("click", function() { sortTable(3); });

headerRow.appendChild(headerCell1);
headerRow.appendChild(headerCell2);
headerRow.appendChild(headerCell3);
headerRow.appendChild(headerCell4);
table.appendChild(headerRow);

	for (var i = 0; i < rows.length; i++) {
	  var cols = rows[i].split(",");
	  var row = document.createElement("tr");
	  if (i % 2 == 0) {
		row.style.backgroundColor = "#d1f0d1";
	  } else {
		row.style.backgroundColor = "#ffdede";
	  }
	  for (var j = 0; j < cols.length; j++) {
		var cell = document.createElement("td");
		cell.appendChild(document.createTextNode(cols[j]));
		row.appendChild(cell);
	  }
	  row.addEventListener("click", function() {
		var rowContent = "";
		for (var k = 0; k < this.cells.length; k++) {
		  rowContent += this.cells[k].innerHTML + "|";
		}
		alert(rowContent);
	  });
	  
	 // Crear las celdas iniciales sin comillas dobles
    for (var j = 0; j < row.cells.length; j++) {
      var cell = row.cells[j];
      cell.textContent = cell.textContent.replace(/"/g, '');
    }
	  
	  table.appendChild(row);
	}

	document.getElementById("table-container").appendChild(table);
  }
};
xhr.send();

function sortTable(columnIndex) {
  var table = document.querySelector("table");
  var rows = Array.from(table.rows).slice(1); // exclude header row
  ascending = !ascending;  // Cambiar la dirección de ordenamiento.

  rows.sort(function(rowA, rowB) {
	var cellA = rowA.cells[columnIndex].textContent.trim();
	var cellB = rowB.cells[columnIndex].textContent.trim();

  if (cellA.localeCompare(cellB, 'es', { sensitivity: 'base' }) < 0) {
  return ascending ? -1 : 1;
} else if (cellA.localeCompare(cellB, 'es', { sensitivity: 'base' }) > 0) {
  return ascending ? 1 : -1;
} else {
  return 0;
}
  });

  for (var i = table.rows.length - 1; i >= 1; i--) {
	table.deleteRow(i);
  }
  
  // Re-insertar filas ordenadas
  for (var i = 0; i < rows.length; i++) {
	var row = rows[i];
	
	// Alternar color de fondo de la fila
	if (i % 2 == 0) {
	  row.style.backgroundColor = "#d1f0d1";
	} else {
	  row.style.backgroundColor = "#ffdede";
	}
	
	 // Crear las celdas actualizadas sin comillas dobles
    for (var j = 0; j < row.cells.length; j++) {
      var cell = row.cells[j];
      cell.textContent = cell.textContent.replace(/"/g, '');
    }

	table.appendChild(row);
  }
}
  </script>
</body>
</html>
			

10.- JSON a tabla.

p170F_JavaScriptTablaJSON.aia

__________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información