BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Google Apps Script, Parte 1: Conceitos, Google Spreadsheet e Google Calendar

Google Apps Script, Parte 1: Conceitos, Google Spreadsheet e Google Calendar

Favoritos

O Google Apps Script é uma linguagem utilizada em desenvolvimento de aplicações integrando serviços da plataforma Google Apps. Além de permitir acesso a praticamente todas as APIs de serviços do Google, o Apps Script possibilita o acesso a serviços de terceiros ea automação de tarefas. Nesta série de dois artigos, será mostrado como usar o ambiente e a linguagem de script do Google para acessar e integrar os principais serviços do Google Apps, incluindo planilhas, calendários, contatos e documentos.

Nesta primeira parte, é apresentado o ambiente e os passos necessários para criar e executar um Google Apps Script. Na próxima parte, será demostrado como integrar vários serviços do Google para criar serviços personalizados, de forma simples e rápida.

A linguagem Google Apps Script é baseada em JavaScript, o que torna o aprendizado mais fácil. Além de oferecer suporte a serviços como emai e calendário, possibilita a criação de interfaces, diretamente em código ou utilizando o GUI Interface Builder, uma ferramenta visual no estilo RAD.

Para começar a utilizar a linguagem, é necessário possuir uma conta do Google por exemplo do GMail, ou de qualquer domínio que utilize a suíte do Google Apps. A seguir, são apresentados os passos para criar um script e escrever uma função utilizando uma planilha no Google Docs.

Acesso a planilhas

Crie uma nova planilha e execute Tools>Script Editor. Uma nova janela será exibida, como na figura a seguir (se necessário, permita que o navegador abra uma nova janela).

Note que todos os itens de menus e telas mostradas neste artigo estarão em inglês. Se preferir outro idioma, basta alterar as configurações do Google Docs (ou qualquer outro serviço que esteja utilizando, como Calendar, Google Sites etc).

O ambiente mostrado permite a criação, edição e visualização de scripts, além ae execução e depuração de funções. Há também a verificação de sintaxe em tempo real e o suporte a autocompletar de código.

Como o script é criado dentro de uma planilha, ele será capaz de manipular todos os seus dados. É possível, por exemplo, ler e escrever valores de células, alterar a formatação etc. É importante saber que um script criado para uma planilha existe apenas naquela planilha. No entanto, pode-se fazer uma cópia da planilha e os scripts também serão copiados.

Pode-se ainda publicar o script para a "Galeria de Scripts" (acessada pelo menu Tools>Script Galery). Os scripts são publicados via o editor de scripts, usando Share>Publish Project. Será exibida uma tela onde deve ser informado o nome do projeto, uma categoria e uma descrição. Após preencher todos os dados é só clicar no botão Publish e os scripts ficarão disponíveis para utilização.

Note que não é possível, a partir de um script, criar ou executar outros scripts, nem executar scripts de outras planilhas. Além disso, as variáveis criadas e executadas durante a execução do script são apagadas após o final da execução. Para armazenar valores utilizados durante a execução, uma sugestão é salvar os valores na própria planilha.

Como exemplo, abaixo é mostrado como alterar o script para adicionar um texto na coluna A da planilha. No editor de scripts, adicione o conteúdo desta listagem ao corpo da função:

function myFunction() {
  // recupera a planilha e depois a aba atual
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = planilha.getActiveSheet();
  // retorna a última linha com dados e escreve texto na coluna 1
  var row = sheet.getLastRow()+1;
  sheet.getRange(row, 1).setValue("primeiro script");
}

O script é executado clicando no botão Play ou usando o comando Run. O editor avisa se o arquivo não foi salvo e pede um nome para o projeto. Se tudo estiver correto, ao executar aparecerá um texto na célula A1.

Todas as vezes em que é executado o script, um novo item será adicionado à coluna A da planilha. Isso porque sempre é obtida a última linha e adicionado 1. A função getRange(), também aceita outros valores como em sheet.getRange("A1").

Integração ao Calendar

O que foi feito até este ponto não parece muito, mas as coisas ficam mais interessantes quando agregamos novos serviços do Google Apps.

Vamos alterar o script para consultar o Google Calendar, procurar por um calendário e listar todas as datas do ano para aquele calendário. O script lerá da célula A1 o nome do calendário, e o intervalo de datas das células B1 e C1.

Primeiro é necessário colocar os valores na planilha, conforme a seguinte figura.

Para o meu usuário no Google Calendar existe um calendário chamado "Brazilian Holidays" que será utilizado para este exemplo. Você precisará alterar a célula A1 planilha para refletir um calendário existente (ou criado) para a sua conta. O código do próximo script é o seguinte, que deve ser adicionado abaixo do script anterior:

function myFunction() {
  // recupera a planilha/aba corrente
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var sh = planilha.getActiveSheet();
  // recupera os valores das células
  var calName = sh.getRange("A1").getValue();
  var date_deb = sh.getRange("B1").getValue();
  var date_fin = sh.getRange("C1").getValue();
  // acessa a API do Google Calendar utilizando o nome do calendário
  var cal = CalendarApp.openByName(calName);
  // procura os eventos do calendário utilizando as datas recuperadas da planilha
  var events = cal.getEvents(new Date(date_deb), new Date(date_fin));

  // percorre o array events
  for (var i = 1 ; i < events.length ; ++i) {
    // para cada evento
    var event = events[i];
    var row = sh.getLastRow()+1;
    // escreve o título na coluna A
    sh.getRange("A"+row).setValue(event.getTitle());
    // a data de início na coluna B
    sh.getRange("B"+row).setValue(event.getStartTime());
    // a data do final do evento na Coluna C
    sh.getRange("C"+row).setValue(event.getEndTime());
  }
}

Neste exemplo, são utilizados os valores das céluas A1, B1 e C1 respectivamente, para buscar um calendário específico, e listar todos os eventos para um intervalo de data específico.

A opção View>Execution Transcript exibe, passo a passo, a execução de cada linha do script, incluindo valores com que as funções foram chamadas, objetos criados etc. Trata-de de uma ótima ferramenta para analisar o fluxo de execução de um script.

Como o exemplo utiliza a API do Calendar, e não apenas a planilha atual, o engine do Google Apps Script solicitará permissão para executar o script. A janela de solicitação exibe o usuário logado e todas as APIs que estão solicitando permissão. Após permitir o uso da API do Calendar, a execução do script terá o retorno mostrado a seguir (os dados mostrados, é claro, dependerão do calendário escolhido):

Observe que todos os eventos existentes do calendário no intervalo de 01 de janeiro até 31 de dezembro de 2011 foram listados e adicionados à planilha.

Criação de interfaces

Outra funcionalidade importante oferecida pelo Google Apps Script é a criação de interfaces com o usuário. Veremos agora um exemplo de script que cria um interface simples, com dois labels e um campo de texto, onde o usuário informa um número, que é elevado ao quadra. Note que a funcionalidade extremamente simples ajuda a focar nos funcionamento do Apps Script. Exemplos posteriores aumentarão em complexidade.

A interface utilizada neste exemplo foi criada no Interface GUI Builder (comando File> Build a User Interface), é exibida abaixo.

Todos os componentes visuais criados para o Google Apps Script devem ter valores para seu ID (e quando aplicável, no seu campo Name), para que os componentes possam ser utilizados em scripts. Note no canto superior direito da janela, que a parte Component Tree exibe todos os componentes que foram criados na tela, e que o componente pai é "Component1". Após salvar a interface (usamos o nome "MyGui 1"), ela pode ser carregada utilizando a instrução loadComponent() e adicionada à aplicação. O código abaixo mostra como utilizar o loadComponent() para carregar a nova tela:

function doGet() {
  // cria a aplicação e seta o título
  var app = UiApp.createApplication().setTitle("teste");
  // carrega o componente
  app.add(app.loadComponent("MyGui 1"));
  // cria um handler apontando para a função que deve ser chamada
  var handler = app.createServerClickHandler("elevaAoQuadrado");
  // adiciona o handler ao botão
  app.getElementById("btb_compute").addClickHandler(handler);
  // adiciona a árvore de componentes ao handler
  handler.addCallbackElement(app.getElementById("Component1"));
  // retorna a aplicação, necessário para publicar como serviço
  return app;
}

function exibeGuiNaPlanilha() {
  // cria a aplicação e seta o título, e carrega o componente
  var app = UiApp.createApplication().setTitle("teste");
  app.add(app.loadComponent("MyGui 1"));
  // cria um handler apontando para a função a ser chamada
  var handler = app.createServerClickHandler("elevaAoQuadrado");
  // adiciona o handler ao botão
  app.getElementById("btb_compute").addClickHandler(handler);
  // adiciona a árvore de componentes ao handler
  handler.addCallbackElement(app.getElementById("Component1"));
  // exibe a GUI da aplicação dentro de uma planilha (necessário caso
  // caso queira chamar a interface usando um botão ou item de menu)

  SpreadsheetApp.getActiveSpreadsheet().show(app);
}

function elevaAoQuadrado(e) {
  // recupera a aplicação
  var app = UiApp.getActiveApplication();
  var numero = 0;
 
  try  {
    // recupera campo texto da tela, recebido como parâmetro
    // e tenta converter o número para inteiro
    numero = parseInt(e.parameter.txt_number);
  }
  catch(ex) {
    app.getElementById('lbl_resultado').setText(ex);
  }
 
  var resultado = numero * numero;
  // referência para label na tela onde será exibido o resultado
  var lbl = app.getElementById('lbl_resultado');
  try {
    // escreve o valor no label
    lbl.setText(String(resultado));
  }
  catch(prob) {
    lbl.setText("erro: " + prob);
  }
  return app;
}

Esse novo script tem três métodos elevaAoQuadrado(), doGet() e exibeGuiNaPlanilha(). O método doGet() é invocado quando a aplicação é compartilhada e precisa retornar a aplicação; já o método exibeGuiNaPlanilha() é utilizado para exibir a GUI de dentro da planilha, que pode ser após pressionar um botão ou acionando um item de menu. Ao invés de retornar a aplicação, ele executa a função show(). A função elevaAoQuadrado recebe um parâmetro, recupera o valor passado pela interface, faz o cálculo e escreve o resultado em um label. Para que o script tenha acesso aos componentes, é necessário criar callbacks como feito nas linhas abaixo:

var handler = app.createServerClickHandler("elevaAoQuadrado");
app.getElementById("btb_compute").addClickHandler(handler);
handler.addCallbackElement(app.getElementById("Component1"));

Primeiro é criado um ServerClickHandler, que aponta para a função que será executada com o clique do botão; depois o handler é atribuído ao botão (btb_compute foi o ID dado no momento da criação do botão no Interface Builder). Por último, para que o script possa ler e alterar os valores dos componentes, é adicionado um CallBackElement, passando como parâmetro toda a árvore de objetos.

Disponibilização como serviço

É possível compartilhar o script ou disponibilizá-lo como serviço com o comando Share>Publish as a Service. Uma mensagem é exibida informando os tipos de publicação possíveis, por exemplo, acesso apenas ao dono da planilha, qualquer pessoa do domínio ou acesso público via URL. Neste último caso, as alterações feitas pelo script ocorrem como se o dono da planilha as estivesse fazendo, então esse nível de acesso deve ser utilizado com cautela.

Feita a publicação, o serviço pode ser acessado pela URL. E se a opção "Permitir Acesso Anônimo" for selecionada, qualquer pessoa poderá acessar; caso contrário o usuário será redirecionado para a tela de login do Google para informar o usuário e senha de sua conta do Google, para acesso a aplicação. O exemplo está disponível como serviço.

Conclusões e próximos passos

Neste artigo foram mostrados conceitos e passos básicos para criar e executar scripts em aplicações do Google Docs e outros serviços do Google. Vistos os elementos fundamentais, podemos passar a funcionalidades e exemplos mais substanciais. Na segunda parte, será apresentado como adicionar scripts ao Google Sites, criar triggers, interagir com documentos e enviar emails.


 

Sobre o autor

Alex Eduardo Chiaranda (@aechiara) é Bacharel em Ciência da Computação pela Escola de Engenharia de Piracicaba. Especialista em porte e integração de sistemas nas linguagens C/C++ e Java, já prestou consultoria para órgãos do Governo e empresas como Borland e Ericsson. Apaixonado por games e tecnologia, mantém um blog pessoal sobre tecnologia, filmes e jogos.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

  • Ótima publicação. Parabéns!!!!

    by Jailson Bezerra da Silva,

  • Google Calendar

    by Ed Souto,

  • ótimo.

    by cleitores guimaraes,

  • Varias colunas com o mesmo tamanho

    by fernando mendes,

  • Ocultar linhas de uma planilha quando forem nelas tiverem valores iguais a zero

    by Pedro Henrique,

  • Ótimo post.

    by Adriano Alves de Almeida,

    • Re: Ótimo post.

      by Alex Chiaranda,

      • Re: Ótimo post.

        by Adriano Alves de Almeida,

        • Ótima publicação. Parabéns!!!!

          by Jailson Bezerra da Silva,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Muito útil. Há tempos que procuro por informações sobre o google script em português, ainda bem que vocês existem! Parabén InfoQ, em especial ao autor Alex Eduardo Chiaranda.

        • Google Calendar

          by Ed Souto,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá, sabe me dizer se é possível gerarmos um evento a partir de uma informação da planilha do Google? E, de preferência, que estas duas coisas fiquem relacionadas?

        • ótimo.

          by cleitores guimaraes,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Tenho uma dúvida, talvez possa me ajudar. Estou montando uma planilha onde a coluna A será o disparo para a B e C.
          Tenho uma código que, após o disparo da A, gera data e hora APENAS na B....gostaria de que gerasse a DATA apenas na B e o horário Apenas na C. Digo isso pq a B, também será um outro disparo para a coluna D, que terá números sequenciais......e com data+ hora juntos a função não interpreta para acrescenta + 1.
          Alguem pode me ajudar?

        • Re: ótimo.

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá Cleitores Guimaraes, você pode formatar a célula com a função setNumberFormat, que apesar do nome serve tanto para números, quanto para datas:

          setNumberFormat(numberFormat) Sets the number or date format to the given formatting string.

          Algo mais ou menos assim:


          function onOpen() {
          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];

          var cell = sheet.getRange("B1");
          cell.setNumberFormat("dd/MM/yyyy");
          }


          Espero que ajude.

        • Re: Google Calendar

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá, poderia explicar melhor, que tipo de evento você gostaria de gerar ?

          Da planilha para o Calendar é possível, do Calendar para a planilha não, você teria que usar a planilha com disparos programados para se atualizar com relação ao calendário.

          Dê uma olhada na API do Google Scripts com relação ao Calendar e CalendarEvents
          developers.google.com/apps-script/reference/cal...

        • Varias colunas com o mesmo tamanho

          by fernando mendes,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá Alex ótimo post. Agora uma dúvida tenho uma planilha que oculta diversas colunas sendo que, todas as colunas precisam ter o mesmo tamanho. Consegui solucionar em parte o problema criando o código abaixo mas é ineficiente pois trata-se de uma planilha com mais de 357 colunas. Existe uma solução mais otimizada pelo menos para que as colunas fiquem com o tamanho de 57 pixels?

          Agradeço de antemão pela ajuda.

          function esconde(){
          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];

          // Sets the seven column to a width of 57 pixels

          sheet.setColumnWidth(7,57);sheet.setColumnWidth(8,57);sheet.setColumnWidth(9,57);sheet.setColumnWidth(10,57);sheet.setColumnWidth(11,57); sheet.setColumnWidth(12,57);sheet.setColumnWidth(13,57);sheet.setColumnWidth(14,57);sheet.setColumnWidth(15,57); sheet.setColumnWidth(16,57);sheet.setColumnWidth(17,57);sheet.setColumnWidth(18,57);sheet.setColumnWidth(19,57);sheet.setColumnWidth(20,57); sheet.setColumnWidth(21,57);sheet.setColumnWidth(22,57);sheet.setColumnWidth(23,57);sheet.setColumnWidth(24,57);sheet.setColumnWidth(25,57);

          // This hides the column

          var range = sheet.getRange("C1");
          sheet.hideColumn(range);
          var range = sheet.getRange("H1:M1");
          sheet.hideColumn(range);
          var range = sheet.getRange("O1:T1");
          sheet.hideColumn(range);
          var range = sheet.getRange("O1:T1");
          sheet.hideColumn(range);
          var range = sheet.getRange("V1:AA1");
          sheet.hideColumn(range);
          var range = sheet.getRange("AC1:AH1");
          sheet.hideColumn(range);
          var range = sheet.getRange("AJ1:AK1");
          sheet.hideColumn(range);
          var range = sheet.getRange("AM1:AO1");
          sheet.hideColumn(range);
          var range = sheet.getRange("AQ1:AV1");
          sheet.hideColumn(range);
          var range = sheet.getRange("AX1:BC1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BE1:BJ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BL1:BM1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BO1:BQ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BS1:BX1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BZ1:CE1");
          sheet.hideColumn(range);
          var range = sheet.getRange("CG1:CL1");
          sheet.hideColumn(range);
          var range = sheet.getRange("CN1:CR1");
          sheet.hideColumn(range);
          var range = sheet.getRange("CU1:CZ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("DB1:DG1");
          sheet.hideColumn(range);
          var range = sheet.getRange("DI1:DN1");
          sheet.hideColumn(range);
          var range = sheet.getRange("DP1:DV1");
          sheet.hideColumn(range);
          var range = sheet.getRange("DX1:EB1");
          sheet.hideColumn(range);
          var range = sheet.getRange("ED1:EI1");
          sheet.hideColumn(range);
          var range = sheet.getRange("EK1:EP1");
          sheet.hideColumn(range);
          var range = sheet.getRange("ER1:EW1");
          sheet.hideColumn(range);
          var range = sheet.getRange("EY1:FA1");
          sheet.hideColumn(range);
          var range = sheet.getRange("FC1:FD1");
          sheet.hideColumn(range);
          var range = sheet.getRange("BL1:BM1");
          sheet.hideColumn(range);
          var range = sheet.getRange("FF1:FK1");
          sheet.hideColumn(range);
          var range = sheet.getRange("FM1:FR1");
          sheet.hideColumn(range);
          var range = sheet.getRange("FT1:FY1");
          sheet.hideColumn(range);
          var range = sheet.getRange("GA1:GE1");
          sheet.hideColumn(range);
          var range = sheet.getRange("GH1:GM1");
          sheet.hideColumn(range);
          var range = sheet.getRange("GO1:GT1");
          sheet.hideColumn(range);
          var range = sheet.getRange("GV1:HA1");
          sheet.hideColumn(range);
          var range = sheet.getRange("HC1:HJ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("HL1:HO1");
          sheet.hideColumn(range);
          var range = sheet.getRange("HQ1:HV1");
          sheet.hideColumn(range);
          var range = sheet.getRange("HX1:IC1");
          sheet.hideColumn(range);
          var range = sheet.getRange("IE1:IJ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("IL1:IO1");
          sheet.hideColumn(range);
          var range = sheet.getRange("IQ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("IS1:IX1");
          sheet.hideColumn(range);
          var range = sheet.getRange("IZ1:JE1");
          sheet.hideColumn(range);
          var range = sheet.getRange("JG1:JL1");
          sheet.hideColumn(range);
          var range = sheet.getRange("JN1:JS1");
          sheet.hideColumn(range);
          var range = sheet.getRange("JU1:JZ1");
          sheet.hideColumn(range);
          var range = sheet.getRange("KB1:KG1");
          sheet.hideColumn(range);
          var range = sheet.getRange("KI1:KN1");
          sheet.hideColumn(range);
          var range = sheet.getRange("KP1:KU1");
          sheet.hideColumn(range);
          var range = sheet.getRange("KW1:KX1");
          sheet.hideColumn(range);
          var range = sheet.getRange("KZ1:LB1");
          sheet.hideColumn(range);
          var range = sheet.getRange("LD1:LI1");
          sheet.hideColumn(range);
          var range = sheet.getRange("LK1:LP1");
          sheet.hideColumn(range);
          var range = sheet.getRange("LR1:LW1");
          sheet.hideColumn(range);
          var range = sheet.getRange("LY1:MB1");
          sheet.hideColumn(range);
          var range = sheet.getRange("MD1");
          sheet.hideColumn(range);
          var range = sheet.getRange("MF1:MK1");
          sheet.hideColumn(range);
          var range = sheet.getRange("MM1:MR1");
          sheet.hideColumn(range);
          var range = sheet.getRange("MT1:MY1");
          sheet.hideColumn(range);
          var range = sheet.getRange("NA1:NG1");
          sheet.hideColumn(range);
          }

        • Ocultar linhas de uma planilha quando forem nelas tiverem valores iguais a zero

          by Pedro Henrique,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          boa tarde,
          sou novo no assunto e estou tendo um probleminha, gostaria de saber como faço para ocultar linhas de uma planilha quando elas tiverem valores iguais a zero.

        • Re: Varias colunas com o mesmo tamanho

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá, infelizmente tem que trabalhar com os ranges, não tem muita opção.

        • Re: Ocultar linhas de uma planilha quando forem nelas tiverem valores iguai

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá Pedro, tem o hideRows, tem 03 opções.

          hideRow(row)
          Hides the rows in the given range.


          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];

          // This hides the first row
          var range = sheet.getRange("A1");
          sheet.hideRow(range);

          --

          hideRows(rowIndex)
          Hides the row at the given index.


          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];
          // Hides the first row
          sheet.hideRows(1);

          --

          hideRows(rowIndex, numRows)
          Hides one or more consecutive rows starting at the given index.


          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getSheets()[0];
          // Hides the first three rows
          sheet.hideRows(1, 3);

          Você pode dar uma olhada na documentação oficial se tiver alguma duvida quanto aos parâmetros.
          developers.google.com/apps-script/reference/spr...

          Abs,

        • Ótimo post.

          by Adriano Alves de Almeida,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Talvez você possa me ajudar. Eu tenho um modelo de proposta no Google planilha e preciso de um exemplo de scrip que crie um novo negócio em meu pipeline no CRM HubSpot e associasse empresa e contato. Você consegue me ajudar?

        • Re: Ótimo post.

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Até mais

          Talvez você possa me ajudar. Eu tenho um modelo de proposta no Google planilha e preciso de um exemplo de scrip que crie um novo negócio em meu pipeline no CRM HubSpot e associasse empresa e contato. Você consegue me ajudar?


          Olá Adriano, sim, é possível fazer a integração, me parece que o HubSpot tem uma API para esse fim, mas você ficará limitado ao que a API oferece.

          Você pode ver os métodos disponíveis no site para desenvolvedores do Hubspot, acredito que nesse endereço developers.hubspot.com/docs/overview

          Você precisará utilizar os métodos de requisições Web do Google Scripts, verifique como utilizar na documentação oficial: developers.google.com/apps-script/reference/url...

          Até mais

        • Re: Ótimo post.

          by Adriano Alves de Almeida,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Obrigado pela resposta.

          Infelizmente eu não tenho conhecimento necessário para realizar essa integração. Você consegue disponibilizar um exemplo? O HubSpot tem um CRM gratuito que você pode realizar os teste se puder me ajudar.

          Abraço e mais uma vez, muito obrigado pelo retorno.

        • Re: Ótimo post.

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Obrigado pela resposta.

          Infelizmente eu não tenho conhecimento necessário para realizar essa integração. Você consegue disponibilizar um exemplo? O HubSpot tem um CRM gratuito que você pode realizar os teste se puder me ajudar.

          Abraço e mais uma vez, muito obrigado pelo retorno.


          Adriano, me envie uma mensagem privada no Twitter (@aechiara) que tento te ajudar.

          Abs,

        • Re: Ótimo post.

          by Adriano Alves de Almeida,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Combinado.

        • Incrementa hora!!!

          by Alisson Fabrinni,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá boa noite. Estou tentando criar um script para incrementar a hora a hora que se encontra em determinado endereço, obtido através da função =Agora(). Meu objetivo é fazer o relógio incrementar os segundo, minutos, etc... Ou seja quero ver os segundos passando. Fiz isso no Excel, mas na planilha do google ainda não consegui.

        • Re: Incrementa hora!!!

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá, você vai ter que disparar um trigger minuto a minuto para isso acontecer, não sei se seria uma boa idéia
          Mas por questões didáticas, você poderia fazer isso:

          ScriptApp.newTrigger('changeClock')
          .timeBased()
          .everyMinutes(1)
          .create();

          isso cria um trigger programaticamente que vai rodar indefinidamente(até que seja deletado), a função changeClock, a cada minuto. Aí você pode atualizar a célula ou qualquer outra coisa que quiser nessa função.

          Não esqueça de deletar o trigger:
          function deleteTrigger() {

          // Loop over all triggers and delete them
          var allTriggers = ScriptApp.getProjectTriggers();

          for (var i = 0; i < allTriggers.length; i++) {
          ScriptApp.deleteTrigger(allTriggers);
          }
          }

          Até mais

        • Preciso de Ajuda para um Script

          by Leo santos,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Gostaria de saber como faço o seguinte script:
          1. Escrevo dados em um banco de dados do planilhas google.
          2. Deste banco de dados gero um arquivo em pdf.
          3. Este arquivo em pdf é baixado para o computador.
          desde já agradeço a ajuda.

        • Re: Preciso de Ajuda para um Script

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá Leo !
          Você pode criar um serviço REST que pegue os dados no banco de dados para você, aí você usa esse serviço para popular a planilha e então gerar o PDF.

          Abs

        • Script para permissão intervalos protegidos

          by Nucen Cevam,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá, tenho um script para bloquear vários intervalos de varias abas de uma planilha, só que quando eu à compartilho fica a permissão para quem eu compartilhei editar o intervalo, teria como acrescentar no script para que a permissão seja só para mim?

          Esse é o script
          function protFormulas() {
          //RECUPERA OS NOMES DO ARQUIVO E DA PLANILHA ATIVA
          var planilha = SpreadsheetApp.getActiveSpreadsheet();
          var arquivo = planilha.getName();
          //CRIA ARRAY COM AS ABAS A TEREM CÉLULAS PROTEGIDAS
          var prot_aba = ["SEM18", "SEM19", "SEM20", "SEM21", "SEM22", "SEM23", "SEM24", "SEM25", "SEM26"];
          //DEFINIÇÃO DE TÍTULOS ESPECÍFICOS E INICIALIZAÇÃO DE VARIÁVEL INTERVALO DE LINHAS
          var titulo1 = "Colunas protegidas";
          var titulo2 = "Linhas protegidas";
          var prot_lin = "";
          //DEFINIÇÃO DA LINHA A SER PROTEGIDA EM FUNÇÃO DO NOME DO ARQUIVO
          switch (arquivo) {
          case "Planilha de Informações Diárias DTE I 3º CICLO 2019":
          prot_lin = "A21:AX21";
          break;
          case "Planilha de Informações Diárias DTE II 3º CICLO 2019":
          prot_lin = "A25:AX25";
          break;
          case "Planilha de Informações Diárias DTE III 3º CICLO 2019":
          prot_lin = "A23:AX23";
          break;
          case "Planilha de Informações Diárias DTE IV 3º CICLO 2019":
          prot_lin = "A25:AX25";
          break;
          case "Planilha de Informações Diárias DTE V 3º CICLO 2019":
          prot_lin = "A26:AX26";
          break;
          case "Planilha de Informações Diárias DTE VI 3º CICLO 2019":
          prot_lin = "A35:AX35";
          break;
          case "Planilha de Informações Diárias DTE VII 3º CICLO 2019":
          prot_lin = "A8:AX8";
          break;
          }
          //LOOPING PELAS ABAS PARA REALIZAR A PROTEÇÃO
          for (var i = 0; i < prot_aba.length; i++) {
          var ativa = planilha.setActiveSheet(planilha.getSheetByName(prot_aba));
          //PROTEGE CADA COLUNA DE TOTAIS DAS ABAS
          ativa.getRange("G6:G").protect().setDescription(titulo1);
          ativa.getRange("M6:M").protect().setDescription(titulo1);
          ativa.getRange("N6:N").protect().setDescription(titulo1);
          ativa.getRange("T6:T").protect().setDescription(titulo1);
          ativa.getRange("Z6:Z").protect().setDescription(titulo1);
          ativa.getRange("AF6:AF").protect().setDescription(titulo1);
          ativa.getRange("AL6:AL").protect().setDescription(titulo1);
          ativa.getRange("AR6:AR").protect().setDescription(titulo1);
          ativa.getRange("AX6:AX").protect().setDescription(titulo1);
          //PROTEGE A LINHA DE TOTAIS DAS ABAS (DEPENDENDO DO NOME DO ARQUIVO)
          ativa.getRange(prot_lin).protect().setDescription(titulo2);
          }
          }

          Desde já agradeço.

        • Re: Script para permissão intervalos protegidos

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá,
          para bloquear a edição do script você tem criá-lo como um add-on. Tem algumas restrições, esteja atento à elas, você encontra mais informações nesse link:

          developers.google.com/gsuite/add-ons/editors/sh...

        • Re: Script para permissão intervalos protegidos

          by Nucen Cevam,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Bom Dia!
          O que eu quero é que esses intervalos do script que bloqueiam as colunas nao fique a permissão de digitar neles para a pessoa que eu compartilhei a planilha.
          imgur.com/6b60rnT

          Obrigado.

        • Script para ocultar lnha preenchida.

          by João Camilo,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Pessoal, boa noite. Tudo bem?

          Estou com uma grande dificuldade em resolver um script.

          Situação: Se celula "x" estiver preenchida como "Vendido" então eu preciso ocultar a linha.

          Poderiam me ajudar?

        • Re: Script para permissão intervalos protegidos

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá Nucen.
          Não sei se isso é possível, se você compartilha com a pessoa e coloca a pessoa como "Editor".

          Abs,

        • Re: Script para ocultar lnha preenchida.

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Olá João, na documentação tem a função hideRow / hideRows
          veja se atende o que vc precisa.

          developers.google.com/apps-script/reference/spr...

          Abs,

          Pessoal, boa noite. Tudo bem?

          Estou com uma grande dificuldade em resolver um script.

          Situação: Se celula "x" estiver preenchida como "Vendido" então eu preciso ocultar a linha.

          Poderiam me ajudar?

        • Funções de Scripts

          by Marcio Jose,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Boa noite, gostaria de saber como posso executar uma macro assim que a planilha é carregada.

          Gostaria de saber se posso armazenar um dado do Google forms em uma célula específica. E que esse dados seja apagado toda vez que a página é carregada.

        • Re: Funções de Scripts

          by Alex Chiaranda,

          Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

          Boa noite, gostaria de saber como posso executar uma macro assim que a planilha é carregada.

          Gostaria de saber se posso armazenar um dado do Google forms em uma célula específica. E que esse dados seja apagado toda vez que a página é carregada.



          Olá Marcio, na parte 2 desse tutorial eu falo dos triggers, e especificamente do onOpen que é executado quando a planilha é aberta, você pode ler a continuação deste tutorial nesse link www.infoq.com/br/articles/google-apps-script-pa...

          No trigger onOpen, você pode realizar a ação que você quer, apenas atenção, porque o trigger só executa após a planilha ser totalmente carregada.

          Você pode encontrar a documentação sobre esse e outros triggers acessando este link developers.google.com/apps-script/guides/triggers

          Espero ter ajudado !

          Abs

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT