Jump to content

Desfazer alteração clicando em Cancelar


Pedro Augusto

Postagens Recomendadas

Olá pessoal, tudo bem?preciso de ajuda com um script que estou fazendo no Apps Script, eu não entendo praticamente nada de linguagem java, estou no começo, então estou pelejando.

Bom, direto ao assunto, estou criando uma planilha de fluxo de caixa, e tenho a intenção de fazer o seguinte, criar um botão onde fecharia o caixa, o processo de coleta de informação já fiz, mas o mais importe é: quero que quando o caixa feche, que a guia daquele dia(no caso tem uma guia para cada dia do mês) não fique mais possível a edição, tentei fazer por proteção de célula, mas o próprio usuário não pode se retirar a permissão de edição, int a melhor opção que achei foi de colocar um Browser.inputBox com uma senha, que aparece quando é feita uma alteração na guia após ela ser fechada, mas o problema é:

a intenção é que caso o usuario clique em cancelar no Browser.inputBox, a alteração seja desfeita, e retorne para como estava antes, MAS AI É QUE ESTÁ, não consegui que voltasse a como era antes,nem apagar, mesmo tentando com o Chatgpt não vai, me ajudem por favor!

Segue o script:
 

var rangeEditada = null;

var valoresOriginais = null;



function onOpen() {

  adicionarTriggerVerificacaoSenha();

}



function adicionarTriggerVerificacaoSenha() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();

  ScriptApp.newTrigger("verificarSenha")

           .forSpreadsheet(planilha)

           .onEdit()

           .create();

}



function verificarSenha(e) {

  var senhaCorreta = "123";

  var usuario = Session.getActiveUser();

  var sheet = e.range.getSheet();



  if (!sheet.getName().match(/^\d{2}$/)) return; // Sai se a guia não estiver no formato "XX"



  var senhaDigitada;

  var tentativas = 0;



  while (true) {

    senhaDigitada = Browser.inputBox('INFORME A SENHA', 'Senha:', Browser.Buttons.OK_CANCEL);



    if (senhaDigitada === senhaCorreta) {

      break; // Sai do loop se a senha estiver correta

    } else if (senhaDigitada === "cancel") {

      if (rangeEditada && valoresOriginais) {

        rangeEditada.setValues(valoresOriginais);

      }

      return; // Sai da função sem exibir o Browser.msgBox novamente

    }



    tentativas++;

    if (tentativas > 0) {

      Browser.msgBox("Senha incorreta!");

    }

  }



  // Remove o trigger após a primeira execução

  ScriptApp.getProjectTriggers().forEach(function(trigger) {

    ScriptApp.deleteTrigger(trigger);

  });



  // Salva a célula editada e seus valores originais

  rangeEditada = e.range;

  valoresOriginais = e.range.getValues();

}

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

Olá! Para desfazer as alterações caso o usuário clique em "Cancelar" no Browser.inputBox, você pode armazenar os valores originais da célula editada antes de solicitar a senha. Em seguida, se o usuário clicar em "Cancelar", você pode restaurar os valores originais da célula. Aqui está o código atualizado:

 

var rangeEditada = null;
var valoresOriginais = null;

function onOpen() {
  adicionarTriggerVerificacaoSenha();
}

function adicionarTriggerVerificacaoSenha() {
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger("verificarSenha")
          .forSpreadsheet(planilha)
          .onEdit()
          .create();
}

function verificarSenha(e) {
  var senhaCorreta = "123";
  var usuario = Session.getActiveUser();
  var sheet = e.range.getSheet();

  if (!sheet.getName().match(/^\d{2}$/)) return; // Sai se a guia não estiver no formato "XX"

  var senhaDigitada;
  var tentativas = 0;

  while (true) {
    senhaDigitada = Browser.inputBox('INFORME A SENHA', 'Senha:', Browser.Buttons.OK_CANCEL);

    if (senhaDigitada === senhaCorreta) {
      break; // Sai do loop se a senha estiver correta
    } else if (senhaDigitada === "cancel") {
      if (rangeEditada && valoresOriginais) {
        rangeEditada.setValues(valoresOriginais); // Restaura os valores originais
      }
      return; // Sai da função sem exibir o Browser.msgBox novamente
    }

    tentativas++;
    if (tentativas > 0) {
      Browser.msgBox("Senha incorreta!");
    }
  }

  // Remove o trigger após a primeira execução
  ScriptApp.getProjectTriggers().forEach(function(trigger) {
    ScriptApp.deleteTrigger(trigger);
  });

  // Salva a célula editada e seus valores originais
  rangeEditada = e.range;
  valoresOriginais = e.range.getValues();
}

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

Fala, @Pedro Augusto seja se assim funciona:

 

var rangeEditada = null;
var valoresOriginais = null;
var tipoEdicao = null;



function onOpen() {

  adicionarTriggerVerificacaoSenha();

}



function adicionarTriggerVerificacaoSenha() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();

  ScriptApp.newTrigger("verificarSenha")

           .forSpreadsheet(planilha)

           .onEdit()

           .create();

}



function verificarSenha(e) {

  var senhaCorreta = "123"; // Insira sua senha aqui

  var usuario = Session.getActiveUser();

  var sheet = e.range.getSheet();



  if (!sheet.getName().match(/^\d{2}$/)) return; // Sai se a guia não estiver no formato "XX"



  var senhaDigitada;

  var tentativas = 0;



  while (true) {

    senhaDigitada = Browser.inputBox('INFORME A SENHA', 'Senha:', Browser.Buttons.OK_CANCEL);



    if (senhaDigitada === senhaCorreta) {

      break; // Sai do loop se a senha estiver correta

    } else if (senhaDigitada === "cancel") {

      if (rangeEditada && valoresOriginais) {

        switch (tipoEdicao) {
          case "insercao":
            rangeEditada.deleteCells(SpreadsheetApp.Dimension.ROWS);
            break;
          case "exclusao":
            var sheet = rangeEditada.getSheet();
            var startRow = rangeEditada.getRow();
            var startColumn = rangeEditada.getColumn();
            var numRows = valoresOriginais.length;
            var numCols = valoresOriginais[0].length;
            sheet.getRange(startRow, startColumn, numRows, numCols).setValues(valoresOriginais);
            break;
          case "alteracao":
            rangeEditada.setValues(valoresOriginais);
            break;
        }

      }

      return; // Sai da função sem exibir o Browser.msgBox novamente

    }



    tentativas++;

    if (tentativas > 0) {

      Browser.msgBox("Senha incorreta!");

    }

  }



  // Remove o trigger após a primeira execução

  ScriptApp.getProjectTriggers().forEach(function(trigger) {

    ScriptApp.deleteTrigger(trigger);

  });



  // Salva a célula editada, seus valores originais e o tipo de edição
  rangeEditada = e.range;

  valoresOriginais = e.range.getValues();

  if (e.range.isBlank()) {
    tipoEdicao = "insercao";
  } else if (e.range.getSheet().getRange(e.range.getRow(), 1).isBlank()) {
    tipoEdicao = "exclusao";
  } else {
    tipoEdicao = "alteracao";
  }

}

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

Em 19/04/2024 at 09:29, Tiago Neves disse:

Fala, @Pedro Augusto seja se assim funciona:

 

var rangeEditada = null;
var valoresOriginais = null;
var tipoEdicao = null;



function onOpen() {

  adicionarTriggerVerificacaoSenha();

}



function adicionarTriggerVerificacaoSenha() {

  var planilha = SpreadsheetApp.getActiveSpreadsheet();

  ScriptApp.newTrigger("verificarSenha")

           .forSpreadsheet(planilha)

           .onEdit()

           .create();

}



function verificarSenha(e) {

  var senhaCorreta = "123"; // Insira sua senha aqui

  var usuario = Session.getActiveUser();

  var sheet = e.range.getSheet();



  if (!sheet.getName().match(/^\d{2}$/)) return; // Sai se a guia não estiver no formato "XX"



  var senhaDigitada;

  var tentativas = 0;



  while (true) {

    senhaDigitada = Browser.inputBox('INFORME A SENHA', 'Senha:', Browser.Buttons.OK_CANCEL);



    if (senhaDigitada === senhaCorreta) {

      break; // Sai do loop se a senha estiver correta

    } else if (senhaDigitada === "cancel") {

      if (rangeEditada && valoresOriginais) {

        switch (tipoEdicao) {
          case "insercao":
            rangeEditada.deleteCells(SpreadsheetApp.Dimension.ROWS);
            break;
          case "exclusao":
            var sheet = rangeEditada.getSheet();
            var startRow = rangeEditada.getRow();
            var startColumn = rangeEditada.getColumn();
            var numRows = valoresOriginais.length;
            var numCols = valoresOriginais[0].length;
            sheet.getRange(startRow, startColumn, numRows, numCols).setValues(valoresOriginais);
            break;
          case "alteracao":
            rangeEditada.setValues(valoresOriginais);
            break;
        }

      }

      return; // Sai da função sem exibir o Browser.msgBox novamente

    }



    tentativas++;

    if (tentativas > 0) {

      Browser.msgBox("Senha incorreta!");

    }

  }



  // Remove o trigger após a primeira execução

  ScriptApp.getProjectTriggers().forEach(function(trigger) {

    ScriptApp.deleteTrigger(trigger);

  });



  // Salva a célula editada, seus valores originais e o tipo de edição
  rangeEditada = e.range;

  valoresOriginais = e.range.getValues();

  if (e.range.isBlank()) {
    tipoEdicao = "insercao";
  } else if (e.range.getSheet().getRange(e.range.getRow(), 1).isBlank()) {
    tipoEdicao = "exclusao";
  } else {
    tipoEdicao = "alteracao";
  }

}

 

Ainda não funcionou, cheguei a testar só ele, apaguei os outros scripts que tinha, mas nn adiantou, ainda nn desfaz a alteração

  • Triste 1
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...