Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function ProtectAndUnprotect(e) {
- // Allow the function to run only for authorized users
- var userEmail = Session.getActiveUser().getEmail();
- if (!authorizedEmails.includes(userEmail)) return;
- var sheet = e.source.getActiveSheet();
- var sheetName = sheet.getName();
- // Skip processing for specific sheets
- if (sheetName === "Settings" || sheetName.endsWith("-M") ||
- sheetName === "Shop Template" || sheetName === "Monthwise Template" ||
- sheetName === "Summary") return;
- var range = e.range;
- var row = range.getRow();
- var col = range.getColumn();
- var value = range.getValue();
- var numRows = range.getNumRows();
- // Only process edits in column 5 ("Issued") or column 7 ("Passed")
- if (col !== 5 && col !== 7) return;
- try {
- if (col === 5) { // "Issued" checkbox: protect columns 1-4 and column 8
- var primaryRange = sheet.getRange(row, 1, numRows, 4);
- var additionalRange = sheet.getRange(row, 8, numRows, 1);
- if (value === true) {
- protectRanges([primaryRange, additionalRange]);
- range.setBackground('lightgreen');
- } else if (value === false) {
- unprotectRanges([primaryRange, additionalRange]);
- range.setBackground(null);
- }
- } else if (col === 7) { // "Passed" checkbox: protect column 6
- var targetRange = sheet.getRange(row, 6, numRows, 1);
- if (value === true) {
- protectRanges([targetRange]);
- range.setBackground('lightgreen');
- } else if (value === false) {
- unprotectRanges([targetRange]);
- range.setBackground(null);
- }
- }
- } catch (error) {
- Logger.log("Error processing edit: " + error.message);
- }
- }
- function protectRanges(ranges) {
- ranges.forEach(function(range) {
- // Protect the range and remove all editors for maximum security
- var protection = range.protect().setDescription('Protected by script');
- protection.removeEditors(protection.getEditors());
- range.setBackground('lightgreen');
- });
- }
- function unprotectRanges(ranges) {
- // Assume all ranges are on the same sheet
- var sheet = ranges[0].getSheet();
- var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
- var protectionMap = {};
- // Build a hash map keyed by A1 notation for quick lookup
- protections.forEach(function(protection) {
- var key = protection.getRange().getA1Notation();
- if (protectionMap[key]) {
- protectionMap[key].push(protection);
- } else {
- protectionMap[key] = [protection];
- }
- });
- // Remove protections for the specified ranges
- ranges.forEach(function(range) {
- var key = range.getA1Notation();
- if (protectionMap[key]) {
- protectionMap[key].forEach(function(protection) {
- protection.remove();
- });
- }
- range.setBackground(null);
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement