Proteger rangos en Google Sheets con Macros

Hoy vamos a hablar de protección de datos. Ya hay un video sobre protección de datos sencilla en Sheets, pero hoy vamos a ir un paso más allá y hacerlo con código, usando macros.

Video

Opciones de Protección

  1. Proteger una hoja completa: Evita que cualquier usuario no autorizado edite esa hoja.
  2. Proteger rangos específicos: Permite proteger solo ciertos rangos dentro de una hoja.
  3. Proteger todo menos un rango específico: Permite proteger toda la hoja excepto un rango específico.

Vamos a implementar estas protecciones usando Google Apps Script.

Crear un Menú Personalizado

Primero, vamos a crear un menú personalizado en Google Sheets para acceder a nuestras funciones de protección.

  1. Abre el editor de secuencia de comandos (Herramientas > Editor de secuencia de comandos).
  2. Crea un nuevo proyecto y llámalo ProtecciónDatos.
  3. Añade el siguiente código para crear el menú:
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Protección')
    .addItem('Proteger esta hoja', 'protegerHojaActiva')
    .addItem('Proteger pestaña específica', 'protegerHojaEspecifica')
    .addItem('Proteger rango específico', 'protegerRangoEspecifico')
    .addItem('Proteger todo menos un rango', 'protegerTodoMenosRango')
    .addItem('Desproteger esta hoja', 'desprotegerHojaActiva')
    .addItem('Desproteger rangos', 'desprotegerRangos')
    .addToUi();
}

Proteger la Hoja Activa

Vamos a crear una función que proteja la hoja en la que estamos trabajando.

function protegerHojaActiva() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const proteccion = hoja.protect();
  proteccion.setDescription('Protección de hoja activa');
  proteccion.removeEditors(['correo@example.com']); // Reemplaza con el correo del usuario que quieres excluir
}

Proteger una Hoja Específica

Esta función protege una hoja específica sin importar en cuál estamos parados.

function protegerHojaEspecifica() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NombreDeLaHoja'); // Reemplaza con el nombre de la hoja
  const proteccion = hoja.protect();
  proteccion.setDescription('Protección de hoja específica');
  proteccion.removeEditors(['correo@example.com']); // Reemplaza con el correo del usuario que quieres excluir
}

Proteger un Rango Específico

Esta función protege un rango específico dentro de la hoja activa.

function protegerRangoEspecifico() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const rango = hoja.getRange('B2:C4'); // Reemplaza con el rango que quieres proteger
  const proteccion = rango.protect();
  proteccion.setDescription('Protección de rango específico');
  proteccion.removeEditors(['correo@example.com']); // Reemplaza con el correo del usuario que quieres excluir
}

Proteger Todo Menos un Rango

Esta función protege toda la hoja excepto un rango específico.

function protegerTodoMenosRango() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NombreDeLaHoja'); // Reemplaza con el nombre de la hoja
  const rangoExcepcion = hoja.getRange('B2'); // Reemplaza con el rango que no quieres proteger
  const proteccion = hoja.protect();
  proteccion.setDescription('Protección excepto un rango');
  proteccion.setUnprotectedRanges([rangoExcepcion]);
  proteccion.removeEditors(['correo@example.com']); // Reemplaza con el correo del usuario que quieres excluir
}

Desproteger la Hoja Activa

Esta función desprotege la hoja en la que estamos trabajando.

function desprotegerHojaActiva() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const protecciones = hoja.getProtections(SpreadsheetApp.ProtectionType.SHEET);
  protecciones.forEach(function(proteccion) {
    proteccion.remove();
  });
}

Desproteger Rangos

Esta función desprotege todos los rangos protegidos dentro de la hoja activa.

function desprotegerRangos() {
  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const protecciones = hoja.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  protecciones.forEach(function(proteccion) {
    proteccion.remove();
  });
}

Conclusión

Con estas funciones, podemos proteger y desproteger hojas y rangos específicos en Google Sheets utilizando Google Apps Script. Esto nos permite tener un mayor control sobre quién puede editar qué partes de nuestra hoja de cálculo.

Espero que este tutorial les haya sido útil. Si tienen alguna pregunta o sugerencia, no duden en dejar un comentario.

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.

Pin It on Pinterest

Share This