Google Sheets: Crea una Sopa de Letras Interactiva con Script

Creación de la cuadrícula:

  • Define el tamaño , en mi caso utilice una cuadricula de 10x10



  • Utiliza la función "ALEATORIOENTRE" para generar letras aleatorias en cada celda. Por ejemplo, en la celda A1 puedes escribir: =CHAR(INT(RAND()*26)+65) para generar una letra aleatoria mayúscula.
  • Copia esta fórmula a todas las celdas de la cuadrícula.
  • Inserta las palabras que definiste anteriormente. Puedes hacerlo manualmente o utilizando la función BUSCARV si quieres que las palabras aparezcan en un orden específico
  • Otra forma de hacerlo fue con un script o macro
    • Abrir el Editor de Scripts:

      • Ve al menú Extensiones > Apps Script.
    • Crear un Script:

      • Borra cualquier código que aparezca y reemplázalo con el siguiente script:
      javascript
      function fillEmptyCellsWithRandomLetters() {
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
        var range = sheet.getDataRange(); // Selecciona todo el rango de datos
        var values = range.getValues(); // Obtén los valores en la cuadrícula
       
        for (var i = 0; i < values.length; i++) {
          for (var j = 0; j < values[i].length; j++) {
            if (values[i][j] === "") { // Si la celda está vacía
              values[i][j] = String.fromCharCode(Math.floor(Math.random() * 26) + 65); // Letra aleatoria de A-Z
            }
          }
        }
       
        range.setValues(values); // Escribe los nuevos valores de vuelta en la hoja
      }


 3. Validación de respuestas:

  • Vamos agregar otro script, 

function validateHighlightedWords() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var words = ["SOL", "TIERRA", "MACETA", "SEMILLA","AGUA"]; // Lista de palabras a validar
  var correct = true;

  for (var i = 0; i < words.length; i++) {
    if (!isWordHighlighted(sheet, words[i])) {
      correct = false;
      break;
    }
  }

  if (correct) {
    SpreadsheetApp.getUi().alert("¡Todas las palabras están correctamente resaltadas!");
  } else {
    SpreadsheetApp.getUi().alert("Revisa las palabras resaltadas.Aun te falta mas");
  }
}

function isWordHighlighted(sheet, word) {
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();
  var backgroundColors = dataRange.getBackgrounds();

  // Buscar la palabra en la cuadrícula
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (checkWordInDirection(data, backgroundColors, word, i, j, 0, 1) || // Horizontal derecha
          checkWordInDirection(data, backgroundColors, word, i, j, 1, 0) || // Vertical hacia abajo
          checkWordInDirection(data, backgroundColors, word, i, j, 1, 1) || // Diagonal hacia abajo a la derecha
          checkWordInDirection(data, backgroundColors, word, i, j, 1, -1))  // Diagonal hacia abajo a la izquierda
      {
        return true;
      }
    }
  }
  return false;
}

function checkWordInDirection(data, backgroundColors, word, row, col, rowDir, colDir) {
  for (var k = 0; k < word.length; k++) {
    if (row + k * rowDir >= data.length || col + k * colDir >= data[0].length ||
        col + k * colDir < 0 ||
        data[row + k * rowDir][col + k * colDir] != word[k] ||
        backgroundColors[row + k * rowDir][col + k * colDir] != "#ffff00") { // "#ffff00" es el código de color para amarillo
      return false;
    }
  }
  return true;
}

Crear un Botón en la Hoja

Insertar un Dibujo:


En la hoja de cálculo, ve al menú Insertar > Dibujo > + Nuevo.

Dentro del editor de dibujo, selecciona la herramienta de formas (Shape) y dibuja un rectángulo o cualquier forma que te guste.

Puedes agregar texto a la forma, como "Validar Sopa de Letras".

Una vez que hayas terminado, haz clic en "Guardar y cerrar".

Asignar el Script al Botón:


Haz clic derecho en el botón que acabas de crear y selecciona "Asignar script".

En el cuadro de diálogo que aparece, escribe el nombre de la función que deseas asignar. En este caso, escribe validateHighlightedWords (que es la función que valida las palabras resaltadas en amarillo).

Haz clic en "Aceptar".

2. Probar el Botón

Haz clic en el botón que acabas de crear en tu hoja de cálculo. Esto debería ejecutar el script validateHighlightedWords y mostrarte una alerta si todas las palabras están resaltadas correctamente.




Consideraciones adicionales:

  • Orientación de las palabras: Puedes hacer que las palabras aparezcan en horizontal, vertical, diagonal o incluso en zigzag.
  • Dificultad: Ajusta el tamaño de la cuadrícula y la cantidad de palabras para adaptar la sopa de letras a diferentes niveles de dificultad.
  • Temática: Crea sopas de letras relacionadas con diferentes temas (animales, países, matemáticas, etc.) para hacerlas más educativas.

Les comparto un video para que vean funcionando la sopa de Letras

                                                         https://youtu.be/kCWgJGpJouc

Si te interesa que te ayudemos creando tus sopas de letras contáctanos por medio del formulario 

Comentarios

Entradas más populares de este blog

Ejemplo Macro en Word

Macro de Excel para abrir archivo csv

Graficar funciones en Python con dataframes