Cómo proteger datos en Google Sheets con Apps Script y macros

En este tutorial vamos a aprender a proteger datos en Google Sheets usando Google Apps Script, creando macros que nos permitan proteger hojas completas, rangos específicos o incluso proteger todo menos un rango. Esto nos ayuda a controlar mejor quién puede editar qué partes de nuestra hoja de cálculo, algo fundamental para mantener la integridad de la información. Además, veremos cómo crear un menú personalizado para ejecutar estas protecciones con un solo clic, facilitando mucho el trabajo diario.

Ahora, vamos a entrar en materia con las explicaciones y el código que usaremos para proteger nuestras hojas y rangos usando macros en Google Sheets.

¿Por qué proteger datos en Google Sheets con código?

La protección en Google Sheets es fundamental para evitar que usuarios no autorizados modifiquen información crítica. Aunque Google Sheets tiene opciones manuales para proteger hojas y rangos, usar Google Apps Script nos permite automatizar y personalizar esta protección, por ejemplo, creando un menú con botones para proteger rápidamente lo que necesitemos sin tener que navegar por varias opciones.

Además, la forma más segura de proteger un archivo es controlar quién tiene acceso a él desde la opción Compartir, pero cuando queremos que ciertos usuarios puedan editar algunas partes y no otras, la protección con código es la mejor solución.

Tres maneras básicas de proteger en Google Sheets

Antes de meternos en el código, repasemos las tres formas principales de proteger datos en Sheets:

  • Proteger hojas completas: impide que se edite toda una pestaña.
  • Proteger rangos específicos: bloquea solo ciertas celdas o rangos.
  • Proteger todo menos un rango: bloquea toda la hoja excepto un rango que queda editable.

En cada caso podemos definir qué usuarios pueden o no editar esas áreas protegidas, lo que da un control muy fino sobre la colaboración en el archivo.

Creando un menú personalizado para protección

Para facilitar el acceso a las funciones de protección, lo primero que haremos será crear un menú en Google Sheets que nos permita ejecutar las macros que vamos a construir. Para esto, abrimos el editor de secuencias de comandos desde Herramientas > Editor de secuencias de comandos y creamos la función onOpen() que se ejecuta al abrir el archivo.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Protección')
    .addItem('Proteger hoja activa', 'protegerHojaActiva')
    .addItem('Proteger hoja específica', 'protegerHojaEspecifica')
    .addItem('Proteger rango específico', 'protegerRangoEspecifico')
    .addToUi();
}

Este menú llamado Protección tendrá tres opciones que llamarán a funciones que vamos a definir a continuación para proteger hojas y rangos.

Función para proteger la hoja activa

La primera función protegerá la hoja en la que estés parado. Esto evita tener que navegar por el menú de protección manual cada vez.

function protegerHojaActiva() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var proteccion = hoja.protect().setDescription('Protección hoja activa');
  
  // Aquí puedes definir usuarios que pueden editar, por ejemplo:
  // var editores = proteccion.getEditors();
  // proteccion.removeEditors(editores);
  
  // Asegurarse que el propietario siempre tenga acceso
  proteccion.setWarningOnly(false);
}

Esta función crea una protección en la hoja activa y le asigna una descripción para identificarla. También se puede personalizar para excluir o incluir editores específicos.

Proteger una hoja específica por su nombre

Si quieres proteger siempre una hoja específica sin importar en qué pestaña estés, esta función es para ti. Solo cambia el nombre de la hoja y el resto es igual.

function protegerHojaEspecifica() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NombreDeLaHoja');
  if (hoja) {
    var proteccion = hoja.protect().setDescription('Protección hoja específica');
    proteccion.setWarningOnly(false);
  } else {
    SpreadsheetApp.getUi().alert('La hoja no existe');
  }
}

Recuerda reemplazar 'NombreDeLaHoja' por el nombre real de la pestaña que quieres proteger.

Proteger un rango específico

También puedes proteger solo un rango, por ejemplo de la celda B2 a la C4, sin bloquear toda la hoja.

function protegerRangoEspecifico() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NombreDeLaHoja');
  if (hoja) {
    var rango = hoja.getRange('B2:C4');
    var proteccion = rango.protect().setDescription('Protección rango específico');
    proteccion.setWarningOnly(false);
  } else {
    SpreadsheetApp.getUi().alert('La hoja no existe');
  }
}

Este código protegerá solo el rango indicado y dejará el resto de la hoja editable.

Personalizando quién puede editar

Para que la protección sea efectiva, es importante definir qué usuarios pueden editar el rango o la hoja protegida. Por ejemplo, para excluir a ciertos editores, podemos usar:

var emailsParaExcluir = ['usuario1@ejemplo.com', 'usuario2@ejemplo.com'];
proteccion.removeEditors(emailsParaExcluir);

Esto elimina permisos de edición para esos usuarios en la protección aplicada. Recuerda que el propietario siempre mantiene el acceso.

Conclusión

Hemos visto cómo crear un menú personalizado en Google Sheets para proteger hojas completas, hojas específicas y rangos concretos usando macros con Google Apps Script. También aprendimos a controlar quién puede editar esas áreas protegidas, lo que es fundamental para mantener la integridad de nuestros datos cuando trabajamos en equipo.

La protección con código es mucho más flexible y rápida que hacerlo manualmente, y con este menú puedes proteger cualquier parte de tu hoja con un solo clic.

Como próximos pasos, te recomiendo explorar cómo desproteger hojas y rangos con macros, y cómo administrar usuarios con mayor detalle para tener un control total sobre tu archivo.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.