AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-22097496

Jarvis Davis's questions

Martin Hope
Jarvis Davis
Asked: 2025-04-27 04:24:57 +0800 CST

Como posso destacar linhas duplicadas e condições múltiplas (formatação condicional)

  • 5

Estou tentando destacar uma linha inteira onde há valores duplicados nas colunas (C) e (D) . Basicamente, cada agente (coluna D) deve ter um intervalo de datas exclusivo (coluna C). Essa combinação das colunas C e D deve ser sempre exclusiva e deve ser destacada/sinalizada.

Na formatação condicional, uma fórmula personalizada foi criada para realizar essa tarefa. Mas, quando a fórmula abaixo é adicionada, ela destaca toda a guia da planilha.

=(COUNTIF($A$2:$D$5000, $C2)>1)*(COUNTIF($A$2:$D$5000, $D2)>1)

Na imagem abaixo, forneci um exemplo de linhas que contêm entradas duplicadas nas colunas C e D e devem ser destacadas.

insira a descrição da imagem aqui

google-sheets
  • 1 respostas
  • 30 Views
Martin Hope
Jarvis Davis
Asked: 2025-02-08 22:12:35 +0800 CST

Como posso enviar uma notificação por e-mail se uma palavra-chave específica estiver listada em um intervalo?

  • 5

Visão geral:

  • Estou tentando enviar uma mensagem de notificação por e-mail sempre que a palavra-chave Concluído for listada em uma coluna (CJ).
  • Não tenho certeza se estou usando a abordagem correta, mas a função validate_complete verifica se o valor está listado na coluna CJ. Se existir, ela preenche a coluna CK (na mesma linha) com o texto 'Enviar e-mail' .
  • O texto 'Enviar e-mail' inicia a função Send_notification e o e-mail é entregue no endereço de e-mail especificado.
  • Também criei um gatilho, que deve iniciar a função validate_complete sempre que "Enviar e-mail" for listado na coluna (CK).

Edição atual:

Quando o Trigger é executado, ele é executado por vários minutos e expira ou envia várias mensagens de e-mail de uma vez. É preciso enviar apenas uma mensagem de e-mail quando o texto 'Enviar e-mail' estiver listado para uma linha especificada na coluna (CK), então limpe o texto 'Enviar e-mail' para que vários e-mails não sejam enviados se outra linha também contiver o texto 'Enviar e-mail' .

Mais orientações são muito apreciadas. Obrigado

function validate_complete(){

  const ss = SpreadsheetApp.getActive();

  const sh_01 = ss.getSheetByName('Index');   
  const data = sh_01.getRange('CI2:CK'+sh_01.getLastRow()).getValues();

  var columnNumberToWatch = 88; // column A = 1, B = 2, etc.
  var valueToWatch = 'Complete';

 data.forEach(r=>{
  var range = sh_01.getActiveCell();
  if (range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    range.offset(0, 1).setValue('Send Email');

  }

  });
    sendnotificationEmail();
}



function sendnotificationEmail() {
  const ss = SpreadsheetApp.getActive();

  const sh_02 = ss.getSheetByName('Index'); 
  const date_range = sh_02.getRange('BW2').getValues();
  const data_02 = sh_02.getRange('CI2:CK'+sh_02.getLastRow()).getValues();

  var recipient = "[email protected],[email protected]";
  data_02.forEach(r=>{
 
     let overdueValue = r[2];  
     if (overdueValue === "Send Email"){
         let name = r[0];
         let message = ' Test: ' + name ;
         let subject = 'Test: '+ name + ', ' + date_range + ' Inspections are available' ;
         MailApp.sendEmail(recipient, subject, message); 
     }
       var range_02 = sh_02.getRange('CK2:CK100');
       range_02.clear();

  });  
}

Gatilho atual

google-sheets
  • 1 respostas
  • 52 Views
Martin Hope
Jarvis Davis
Asked: 2024-11-19 02:59:22 +0800 CST

Como posso determinar se o endereço de e-mail de um respondente é único em uma lista?

  • 5

Visão geral : Um arquivo do Planilhas Google é vinculado a 3 Formulários Google. Após o envio de um formulário, as respostas são adicionadas às guias coincidentes da planilha Fictícia: Respostas do Formulário 1 Respostas do Formulário 2 Respostas do Formulário 4

Após cada envio de formulário, os endereços de e-mail são rastreados (coluna B), além de outras respostas às perguntas do formulário.

Objetivo : Meu objetivo é identificar se o endereço de e-mail de um respondente é único em todas as 3 guias de Respostas do Formulário.

Por exemplo, o resultado preferido exibiria apenas um endereço de e-mail se ele estivesse listado em várias guias da Planilha Fictícia.

Os endereços de e-mail estão sendo rastreados na coluna B da Planilha Fictícia. Após essa validação ocorrer, funções subsequentes serão executadas.

Problema atual : A lógica atual está identificando os endereços de e-mail exclusivos por guia de planilha, mas não um resultado cumulativo (ou seja, para todas as guias combinadas). O resultado preferencial exibiria apenas um endereço de e-mail se ele estivesse listado em várias guias de Planilha Fictícia.

Mais orientações seriam muito apreciadas.

function findUnique(){
  var col = 1 ; // column B (Email Address)
  var ss = SpreadsheetApp.getActive();
  var allsheets = ss.getSheets();

  // Array listing sheets to exclude from execution
  var exclude = ["Reference","Index"];

 for (var s in allsheets){
 var source_sheet = allsheets[s];   

    // Stop iteration execution; exclude Reference and Index tabs.
  if(exclude.indexOf(source_sheet.getName()) != -1) continue;

  var data=source_sheet.getDataRange().getValues();// get all data
  //Logger.log(data);
  var newdata = new Array();
  for(nn in data){
    var duplicate = false;
    for(j in newdata){
  
      if(data[nn][col] == newdata[j][0]){
        duplicate = true;
      }
    }

    if(!duplicate){
      newdata.push([data[nn][col]]);
    }
  
  }
Logger.log(newdata);
  newdata.sort(function(x,y){
  var xp = Number(x[0]);// ensure you get numbers
  var yp = Number(y[0]);
  return xp == yp ? 0 : xp < yp ? -1 : 1;// sort on numeric ascending
});
//Logger.log(newdata); // Uniques?
  }
}

Planilha Fictícia

insira a descrição da imagem aqui

javascript
  • 1 respostas
  • 76 Views
Martin Hope
Jarvis Davis
Asked: 2024-11-08 23:11:31 +0800 CST

Como posso salvar o(s) URL(s) depois de fazer uma cópia (evento) de uma planilha do Planilhas Google?

  • 6

Visão geral : Tenho um arquivo de modelo do Planilhas Google que contém várias guias. Quando o arquivo é aberto, o usuário recebe uma mensagem pop-up para "Clique no link para criar uma cópia --> Minha cópia da pasta de trabalho". Depois que a "Cópia da minha pasta de trabalho" é selecionada, o arquivo é salvo em uma pasta específica do Google Drive, e um arquivo exclusivo/novo da Planilha Google é aberto, no qual eles podem fazer edições.

Objetivo: Estou tentando salvar os links de URL dos novos arquivos do Planilhas Google sempre que uma cópia for feita (para a guia Referência ). Meu objetivo é ter os links de URL adicionados à planilha Referência, na coluna C.

Problema atual: O script makeAcopy (faz uma cópia da planilha e adiciona o arquivo ao Google Drive especificado), mas o Link da URL não está sendo adicionado à planilha de referência. Não tenho certeza se estou adotando a abordagem correta, não está claro se a lógica para adicionar os links de URL à planilha de referência precisa ser adicionada em um evento separado (On ​​Open) ou se deve ser incluída no script makeAcopy. Mais orientações seriam muito apreciadas.

function onOpen(e){

const info = e.namedValues;
const blob = makeAcopy(info);
const date = Date;
const entryRow = e.range.getRow();
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,3).setValue(blob);
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,2).setValue(fileName);
SpreadsheetApp.getActiveSheet().getSheetName("Reference").getRange(entryRow,1).setValue(date);

}



function makeAcopy(info){

    var nom = 'My Workbook copy'
        var sheet = SpreadsheetApp.openById('1EylqqfqXWaSCJbvVmqrwJHcwGPUvlQYOZ0wSpvT_mMY')
        var destFolder = DriveApp.getFolderById("1iCVsXmeSMHOpISQslJhX7r842aSHrqos"); //.next();
  
    const ds = Utilities.formatDate(new Date(),SpreadsheetApp.getActive().getSpreadsheetTimeZone(),"MM.dd.yyyy");
  //var fileName = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).setName(`${nom}.${ds}`);
  var fileID = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).getId();


    var htmlOutput = HtmlService
        .createHtmlOutput('<a href="https://docs.google.com/spreadsheets/d/' + fileID + '/" target="_blank">' + nom + '</a>')
        .setWidth(350) //optional
        .setHeight(50); //optional
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click link to create a Copy');

    return fileID;
    //return fileName;

}

Planilha Fictícia

google-sheets
  • 2 respostas
  • 67 Views
Martin Hope
Jarvis Davis
Asked: 2023-08-23 03:21:29 +0800 CST

Execute o valor baseado no Apps Script selecionado na lista suspensa

  • 5

Boa tarde,insira a descrição da imagem aqui

Eu tenho um Planilhas Google que contém uma planilha de resumo e aprox. 20 subguias. Na planilha de resumo, criei uma lista suspensa que lista cada uma das subguias.

Quando um usuário seleciona uma subguia específica na lista suspensa e clica no botão Limpar, desejo que os valores de um intervalo especificado de linhas sejam limpos na guia.

Atualmente tenho uma função separada para cada planilha ser limpa. Estou tentando consolidar isso em uma função.

Na imagem anexada, a lista suspensa é fornecida em

Summary!J4

Trecho da lista suspensa

--> Planning
--> Framing
--> Foundation
--> ALL SHEETS

Anexei um trecho de código e uma imagem para esclarecimentos. Qualquer ajuda é muito apreciada. Obrigado!

function clearPlanningfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Planning");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H13').setValue('');
 shUserForm.getRange('H17:H26').setValue('');
 shUserForm.getRange('H30:H31').setValue('');
 shUserForm.getRange('H35:H41').setValue('');


 shUserForm.getRange('O5:O13').setValue(false);
 shUserForm.getRange('O17:O26').setValue(false);
 shUserForm.getRange('O30:O31').setValue(false);
 shUserForm.getRange('O35:O41').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N16').setValue(0.00);
 shUserForm.getRange('N29').setValue(0.00);
 shUserForm.getRange('N34').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}



function clearFramingfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Framing");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H19').setValue('');
 shUserForm.getRange('H23:H42').setValue('');
 shUserForm.getRange('H46:H66').setValue('');
 shUserForm.getRange('H70:H84').setValue('');


 shUserForm.getRange('O5:O19').setValue(false);
 shUserForm.getRange('O23:O42').setValue(false);
 shUserForm.getRange('O46:O66').setValue(false);
 shUserForm.getRange('O70:O84').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N22').setValue(0.00);
 shUserForm.getRange('N45').setValue(0.00);
 shUserForm.getRange('N69').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}



function clearFoundationfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Foundation");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H10').setValue('');
 shUserForm.getRange('H14:H22').setValue('');
 shUserForm.getRange('H26:H41').setValue('');
 shUserForm.getRange('H45:H55').setValue('');
 shUserForm.getRange('H59:H62').setValue('');


 shUserForm.getRange('O5:O10').setValue(false);
 shUserForm.getRange('O14:O22').setValue(false);
 shUserForm.getRange('O26:O41').setValue(false);
 shUserForm.getRange('O45:O55').setValue(false);
 shUserForm.getRange('O59:O62').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N13').setValue(0.00);
 shUserForm.getRange('N25').setValue(0.00);
 shUserForm.getRange('N44').setValue(0.00);
 shUserForm.getRange('N58').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}

Link de planilha fictícia

google-apps-script
  • 1 respostas
  • 37 Views
Martin Hope
Jarvis Davis
Asked: 2023-08-17 22:29:40 +0800 CST

google apps script Caixas de seleção horizontais como botões de opção (marcar/desmarcar)

  • 5

Bom dia,

Estou tentando implementar caixas de seleção (colunas O e P), nas quais, se uma caixa de seleção estiver marcada, a outra coluna será desmarcada automaticamente. Isso precisará ser para várias linhas.

Uma vez nuance, se um usuário insere uma nova linha, gostaria que esta função fosse capaz de manipular a função marcar/desmarcar na nova linha. Por exemplo, se um usuário inserir uma nova linha acima da linha 9, o recurso Caixa de seleção também será incorporado para a nova linha.

Forneci um anexo do conjunto de dados no Planilhas Google e um exemplo de código para uma linha.

Qualquer orientação é muito apreciada. Obrigadoinsira a descrição da imagem aqui

function onEdit(e) {

  const as = e.source.getActiveSheet();
  const cell = e.range.getA1Notation();
  const cell_checks = ['O5','P5'];
  if(as.getName() == "Planning" && cell_checks.includes(cell) && e.range.isChecked())
  {cell_checks.filter(val=>val!=cell).forEach(c=>as.getRange(c).uncheck())}  
google-apps-script
  • 1 respostas
  • 28 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve