Tutorial: Usar Google Sheets como BD – Ejemplo RNI Perú

  • Autor Autor banco_comunal
  • Fecha de inicio Fecha de inicio
banco_comunal

banco_comunal

Gamma
Verificación en dos pasos activada
Google Sheets es una excelente alternativa como base de datos para proyectos pequeños y medianos, especialmente cuando quieres evitar un backend o un servidor SQL.
Muchos proyectos modernos —incluyendo plataformas de consulta ciudadana similares a RNI Perú (Registro nacional de infieles en Peru)— trabajan exactamente así: leen datos de un Google Sheets público y lo convierten en una API JSON.

En este artículo aprenderás a usar tu Google Sheets como BD usando la Google Visualization API, que NO necesita:

❌ Google API Key
❌ Backend
✔️ Solo JavaScript y un documento público

Ejemplo de uso Google Sheets como base de datos: https://rastrearnumero.com/rni-el-registro-nacional-de-infieles-que-esta-sacudiendo-al-peru/



1️⃣ Tu Google Sheets como Base de Datos​


Tomamos tu URL real:

Insertar CODE, HTML o PHP:
https://docs.google.com/spreadsheets/d/116mlXNpllLviyGcliHayv9tAZtbh71r3/edit?gid=1578621432

Google siempre asigna “Hoja1” en español a la primera pestaña.




2️⃣ Convertir Google Sheets → JSON (sin OpenSheet)​


La URL oficial (y sin dependencias) para obtener los datos es:

Insertar CODE, HTML o PHP:
https://docs.google.com/spreadsheets/d/116mlXNpllLviyGcliHayv9tAZtbh71r3/gviz/tq?tqx=out:json&sheet=Hoja1


Esta URL devuelve JSON “envolvido” en una función, por lo que hay que limpiarlo desde JavaScript.

Tus columnas reales:
  • PLIEGO_NOMBRE
  • ID_PERS
  • EXPEDIENTE_PJ
  • TIPO_DEMANDANTE
  • Suma de SALDO



3️⃣ Interfaz HTML conectada a tu Google Sheets​


Archivo: index.html

Insertar CODE, HTML o PHP:
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Consulta desde Google Sheets</title>
  <style>
    body { font-family: Arial; padding: 20px; }
    input { padding: 10px; width: 350px; }
    .card {
      margin-top: 12px;
      padding: 15px;
      border: 1px solid #ccc;
      border-radius: 6px;
    }
  </style>
</head>
<body>


<h2>Buscador conectado a Google Sheets (sin OpenSheet ni API Keys)</h2>
<input id="busqueda" placeholder="Buscar por pliego, ID o expediente">


<div id="resultados"></div>


<script src="app.js"></script>
</body>
</html>



4️⃣ Código JavaScript consumiendo directamente Visualization API​


Archivo: app.js

Insertar CODE, HTML o PHP:
const URL = "https://docs.google.com/spreadsheets/d/116mlXNpllLviyGcliHayv9tAZtbh71r3/gviz/tq?tqx=out:json&sheet=Hoja1";

let datos = [];
const input = document.getElementById("busqueda");
const resultados = document.getElementById("resultados");

// Convertir el formato GViz de Google → JSON normal
function convertirGViz(texto) {
  const jsonString = texto
    .replace("/*O_o*/", "")
    .replace("google.visualization.Query.setResponse(", "")
    .replace(");", "");

  const json = JSON.parse(jsonString);

  const columnas = json.table.cols.map(c => c.label);
  const filas = json.table.rows;

  const objetos = filas.map(fila => {
    const obj = {};
    fila.c.forEach((celda, i) => {
      obj[columnas[i]] = celda ? celda.v : "";
    });
    return obj;
  });

  return objetos;
}

// 1. Cargar los datos desde Google Sheets
fetch(URL)
  .then(r => r.text())
  .then(t => {
    datos = convertirGViz(t);
    console.log("Datos cargados:", datos);
  });

// 2. Buscador en vivo
input.addEventListener("input", () => {
  const texto = input.value.toLowerCase();
  resultados.innerHTML = "";

  if (!texto.trim()) return;

  const filtrados = datos.filter(item =>
    (item["PLIEGO_NOMBRE"] || "").toLowerCase().includes(texto) ||
    (item["ID_PERS"] || "").toLowerCase().includes(texto) ||
    (item["EXPEDIENTE_PJ"] || "").toLowerCase().includes(texto) ||
    (item["TIPO_DEMANDANTE"] || "").toLowerCase().includes(texto)
  );

  filtrados.forEach(item => {
    resultados.innerHTML += `
      <div class="card">
        <b>Pliego:</b> ${item["PLIEGO_NOMBRE"]}<br>
        <b>ID Persona:</b> ${item["ID_PERS"]}<br>
        <b>Expediente:</b> ${item["EXPEDIENTE_PJ"]}<br>
        <b>Tipo Demandante:</b> ${item["TIPO_DEMANDANTE"]}<br>
        <b>Saldo:</b> ${item["Suma de SALDO"]}<br>
      </div>
    `;
  });

  if (filtrados.length === 0) resultados.innerHTML = "Sin coincidencias.";
});



5️⃣ ¿Qué puedes construir con esto?​


Usando este método puedes desarrollar:

  • Buscadores ciudadanos
  • Directorios abiertos
  • Bases de datos consultables desde navegador
  • Dashboards en vivo
  • Consultas tipo RNI Perú con filtro por nombre / ID
  • Sistemas que se actualizan automáticamente al modificar Google Sheets

Sin backend, sin hosting, sin APIs externas.
 
Gracias por el aporte!
 
Hace poco me tocó resolver algo similar. Pero via:

File / Share / Publish to Web / Link / CSV.

De esa manera consultamos el csv (database) remotamente.
 
Uso algo similar, se escrapean unos datos van a google sheet, luego se hace el publish to web, es una solucion de hace un par de años no se ha actualizado.
 
Hace poco me tocó resolver algo similar. Pero via:

File / Share / Publish to Web / Link / CSV.

De esa manera consultamos el csv (database) remotamente.
otra buena solucion! Gracias por el aporte
 
Uso algo similar, se escrapean unos datos van a google sheet, luego se hace el publish to web, es una solucion de hace un par de años no se ha actualizado.
Exactamente usaba un google sheet para scrapear precios de un centro comercial.

y tambien ando probando para guardar PDF con derechos de autor, convierto todo en base 64 y se divide en cada celda
 
Interesante, gracias por la data.
 
Atrás
Arriba