{"id":705,"date":"2020-08-27T23:53:37","date_gmt":"2020-08-28T02:53:37","guid":{"rendered":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/?page_id=705"},"modified":"2020-08-28T00:10:05","modified_gmt":"2020-08-28T03:10:05","slug":"macros-custom-functions","status":"publish","type":"page","link":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/modulo-avancado\/aula-3-scripts-google\/macros-custom-functions\/","title":{"rendered":"Macros &#038; Custom Functions"},"content":{"rendered":"<p>O material \u00e0 seguir foi retirado e traduzido da p\u00e1gina de suporte ao desenvolvedor do Google, mais especificamente da se\u00e7\u00e3o Apps Script que \u00e9 a linguagem do Google utilizada na G Suite onde est\u00e1 inclu\u00eddo o Google Drive e as Planilhas do Google, trata-se de explica\u00e7\u00f5es b\u00e1sicas sobre o funcionamento dos scripts do Google, embora essa linguagem seja o meio de conversa entre as diferentes ferramentas do Google daremos foco no uso desta linguagem com as Planilhas do Google, quem tiver interesse em se aprofundar nesse conhecimento poder\u00e1 acessar o link\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/\">https:\/\/developers.google.com\/apps-script\/<\/a>\u00a0n\u00e3o \u00e9 necess\u00e1rio conhecimentos pr\u00e9vios para iniciar a trabalhar com o apps script, no entanto, conhecimentos sobre\u00a0<strong>A1 notation<\/strong>\u00a0e\u00a0<strong>Javascript<\/strong>\u00a0s\u00e3o bem \u00fateis e voc\u00ea pode adquirir conhecimento sobre estes itens gratuitamente nos links\u00a0<a href=\"https:\/\/developers.google.com\/sheets\/api\/guides\/concepts#a1_notation\">https:\/\/developers.google.com\/sheets\/api\/guides\/concepts#a1_notation<\/a>\u00a0e\u00a0<a href=\"https:\/\/www.codecademy.com\/catalog\/language\/javascript\">https:\/\/www.codecademy.com\/catalog\/language\/javascript<\/a>.<\/p>\n<p>O primeiro Guia que vamos fazer \u00e9 o de Macros e Custom Functions, pois \u00e9 um dos melhores guias iniciais para se ter uma ideia\u00a0geral\u00a0do que \u00e9 poss\u00edvel fazer com o Apps Scripts dentro das Planilhas do Google, vejamos ent\u00e3o abaixo o conte\u00fado retirado do link:\u00a0<a href=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/#0\">https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/#0<\/a>. Recomendamos que seja feito no m\u00ednimo dois dos 5 tutoriais \u00e0 seguir, este e o de\u00a0Formata\u00e7\u00e3o de Dados<\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"step-title\">Cria\u00e7\u00e3o de uma macro no Planilhas<\/h3>\n<p>Normalmente, ao trabalhar em planilhas, voc\u00ea pode entrar em um ciclo de a\u00e7\u00f5es repetitivas &#8211; copiar valores de c\u00e9lulas, formatar, criar f\u00f3rmulas e assim por diante &#8211; o que pode se tornar tedioso e levar a erros.\u00a0Para fornecer a voc\u00ea uma maneira de automatizar a\u00e7\u00f5es repetitivas, o Planilhas Google fornece\u00a0<em>macros<\/em><em>\u00a0.\u00a0<\/em>As macros permitem &#8216;registrar&#8217; uma s\u00e9rie de a\u00e7\u00f5es em uma planilha.\u00a0Com uma macro gravada, voc\u00ea pode repetir essa s\u00e9rie de a\u00e7\u00f5es em outro lugar em uma planilha com um simples pressionamento de tecla de atalho.<\/p>\n<p>Nesta se\u00e7\u00e3o, voc\u00ea aprender\u00e1 a criar uma macro no Planilhas.\u00a0Na pr\u00f3xima se\u00e7\u00e3o, voc\u00ea ver\u00e1 como as macros s\u00e3o criadas usando o Apps Script.<\/p>\n<p>&nbsp;<\/p>\n<h4>Antes de voc\u00ea come\u00e7ar<\/h4>\n<p>Antes de continuar, voc\u00ea precisa de uma planilha com alguns dados.\u00a0Fornecemos um para voc\u00ea:\u00a0<a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1q1Mxbb4uC-P2ECsF0jKzWRE46iG7o8bjX2TWZhnGA0w\/copy\" target=\"_blank\" rel=\"noopener noreferrer\">clique neste link para copiar a planilha de dados<\/a>\u00a0e, em seguida, clique no bot\u00e3o\u00a0Fazer uma c\u00f3pia\u00a0.<\/p>\n<p><img title=\"Conjunto de dados\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/5b8aded1bb349ecf.png\" width=\"941\" height=\"210\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Uma c\u00f3pia da planilha de exemplo para voc\u00ea usar deve ser colocada na pasta inicial do Google Drive com o nome &#8220;C\u00f3pia dos 10 filmes de maior bilheteria (2018)&#8221;.<\/p>\n<h4><\/h4>\n<h4>Cria\u00e7\u00e3o de uma macro<\/h4>\n<p>Agora que voc\u00ea tem uma planilha para trabalhar, pode gravar uma macro no Planilhas Google.\u00a0Para este exemplo, voc\u00ea criar\u00e1 uma macro que formata uma linha de cabe\u00e7alho para seus dados.\u00a0Basta seguir estas etapas:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Clique na c\u00e9lula A1 para focar o cursor nessa linha.\u00a0Esta \u00e9 a sua linha de cabe\u00e7alho.<\/li>\n<li>No menu, selecione\u00a0Ferramentas&gt; Macros&gt; Gravar macros\u00a0.<\/li>\n<\/ol>\n<p>Assim que voc\u00ea come\u00e7a a gravar, o Planilhas Google come\u00e7a a se lembrar de cada a\u00e7\u00e3o realizada na planilha: destacar c\u00e9lulas, adicionar dados, alternar para planilhas diferentes, formatar e assim por diante.\u00a0Essas a\u00e7\u00f5es se tornam o &#8216;script&#8217; que \u00e9 repetido assim que voc\u00ea salva e ativa a macro posteriormente.<\/p>\n<ol start=\"3\" type=\"1\">\n<li>Na caixa Macro, selecione\u00a0Refer\u00eancia relativa.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Gif: Use refer\u00eancias relativas\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/c59f2f12317352d2.gif\" width=\"505\" height=\"148\" \/><\/p>\n<p>\u00a0 \u00a0 Termos-chave: as\u00a0macros podem usar dois tipos de refer\u00eancias nas planilhas para se referir a c\u00e9lulas espec\u00edficas.\u00a0As refer\u00eancias absolutas\u00a0s\u00e3o fixadas nos locais exatos registrados (por exemplo, c\u00e9lula A5), enquanto\u00a0as refer\u00eancias relativas\u00a0s\u00e3o aplicadas usando a sele\u00e7\u00e3o atual do usu\u00e1rio como ponto de partida (por exemplo, a quarta c\u00e9lula abaixo da sele\u00e7\u00e3o atual).<\/p>\n<aside class=\"special\">\u00a0 \u00a0 Este codelab pede que voc\u00ea use refer\u00eancias relativas para suas macros.<\/aside>\n<p>&nbsp;<\/p>\n<ol start=\"4\" type=\"1\">\n<li>Selecione a\u00a0linha 1\u00a0.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Gif: destacar a linha 1\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/1d782ee30c66a02b.gif\" width=\"833\" height=\"282\" \/><\/p>\n<ol start=\"5\" type=\"1\">\n<li>Recolorir a\u00a0cor de preenchimento\u00a0da linha superior\u00a0de branco para\u00a0magenta escuro 3\u00a0.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Menu de cores (magenta escuro 3)\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/f7e7abaf76e338c7.png\" \/><\/p>\n<ol start=\"6\" type=\"1\">\n<li>Altere a\u00a0cor\u00a0do\u00a0texto\u00a0da linha superior\u00a0de preto para\u00a0branco\u00a0.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Menu de cores (branco)\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/d5e630acbe83148.png\" \/><\/p>\n<ol start=\"7\" type=\"1\">\n<li>Coloque\u00a0o texto em\u00a0negrito\u00a0clicando em\u00a0Ctrl + B\u00a0(ou\u00a0Cmd + B\u00a0em Macs).<\/li>\n<li>Selecione\u00a0Exibir&gt; Congelar&gt; 1 linha\u00a0para congelar a linha superior.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Congelar 1 linha\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/97cb244ffebe8953.png\" width=\"513\" height=\"193\" \/><\/p>\n<ol start=\"9\" type=\"1\">\n<li>Clique no\u00a0bot\u00e3o\u00a0Salvar\u00a0na caixa de di\u00e1logo da macro na parte inferior da tela.\u00a0Uma nova caixa de di\u00e1logo pede que voc\u00ea nomeie a macro;\u00a0d\u00ea a ele o nome &#8220;Cabe\u00e7alho&#8221; e clique em\u00a0Salvar\u00a0.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Gif: Salvar macro como 'Cabe\u00e7alho'\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/b4610a54340da518.gif\" width=\"738\" height=\"697\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Usando a interface de usu\u00e1rio do Planilhas, voc\u00ea criou uma macro especializada para formatar cabe\u00e7alhos!<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Folha com macro\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/4ed7fbed18ea3681.png\" width=\"899\" height=\"338\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Voc\u00ea fez uma macro para formatar cabe\u00e7alhos.\u00a0Passe para a pr\u00f3xima se\u00e7\u00e3o para aprender como aplicar macros no Planilhas.<\/p>\n<h2><\/h2>\n<h4>Ativando sua macro<\/h4>\n<h4><\/h4>\n<p>Voc\u00ea criou uma macro no Planilhas!\u00a0Voc\u00ea pode tentar aplicar sua macro no Planilhas seguindo estas instru\u00e7\u00f5es:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Clique em\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/9c9b0c19bf317e7f.png\" \/>ou\u00a0Adicionar planilha\u00a0para criar uma nova planilha.<\/li>\n<\/ol>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/927c012b4e11475b.png\" \/><\/p>\n<ol start=\"2\" type=\"1\">\n<li>Na nova planilha, adicione algum texto a\u00a0<code>A1:C2<\/code>.\u00a0Sinta-se \u00e0 vontade para seguir os exemplos de entrada abaixo:<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Entradas de exemplo\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/c3aadaef52a609bf.png\" \/><\/p>\n<ol start=\"3\" type=\"1\">\n<li>Destaque a primeira linha.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Selecionando a linha 1\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/cfe36fcf833d0bd7.gif\" \/><\/p>\n<ol start=\"4\" type=\"1\">\n<li>Selecione\u00a0Ferramentas&gt; Macros&gt; Cabe\u00e7alho\u00a0para aplicar a macro \u00e0 \u00e1rea selecionada.<\/li>\n<\/ol>\n<p class=\"image-container\"><img title=\"Aplicando macro\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/6279db9a020fc9e4.png\" \/><\/p>\n<ol start=\"5\" type=\"1\">\n<li>Autorize a macro seguindo as instru\u00e7\u00f5es na tela.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<aside class=\"warning\">\u00a0 \u00a0 Observa\u00e7\u00e3o:\u00a0se voc\u00ea estiver usando uma\u00a0conta\u00a0<a href=\"http:\/\/gmail.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">gmail.com<\/a>\u00a0, tamb\u00e9m poder\u00e1 ver uma caixa de di\u00e1logo do aplicativo N\u00e3o verificado ao usar a macro pela primeira vez.\u00a0O Google usa isso para avisar os usu\u00e1rios que podem estar usando c\u00f3digo de autores desconhecidos ou n\u00e3o confi\u00e1veis.\u00a0Se voc\u00ea vir esta caixa de di\u00e1logo, n\u00e3o h\u00e1 problema em continuar, pois voc\u00ea \u00e9 o autor da macro.\u00a0Siga as instru\u00e7\u00f5es na tela para continuar autorizando a macro.\u00a0O processo de obten\u00e7\u00e3o dessa permiss\u00e3o \u00e9 chamado de\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/services\/authorization\" target=\"_blank\" rel=\"noopener noreferrer\">autoriza\u00e7\u00e3o<\/a>\u00a0.<\/aside>\n<p>&nbsp;<\/p>\n<ol start=\"6\" type=\"1\">\n<li>Repita a\u00a0Etapa 4\u00a0para executar a Macro novamente (autorizando-a para a primeira execu\u00e7\u00e3o).<\/li>\n<\/ol>\n<p>Voc\u00ea aprendeu a aplicar macros no Planilhas.\u00a0Parab\u00e9ns!\u00a0Sua planilha deve ter a seguinte apar\u00eancia:<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7c7130a4a697bd92.png\" \/><\/p>\n<p>\u00a0 \u00a0 As macros permitem que voc\u00ea crie planilhas de maneira eficiente e, na pr\u00f3xima parte deste codelab, voc\u00ea aprender\u00e1 como tornar suas macros ainda mais poderosas!\u00a0Este \u00e9 o segredo: quando voc\u00ea grava uma macro, o que voc\u00ea realmente est\u00e1 fazendo \u00e9\u00a0<em>escrever o<\/em>\u00a0c\u00f3digo do\u00a0<em>Apps Script<\/em>\u00a0.\u00a0Nos bastidores, o Sheets constr\u00f3i o c\u00f3digo que corresponde \u00e0s a\u00e7\u00f5es da macro para voc\u00ea.\u00a0E, na pr\u00f3xima se\u00e7\u00e3o, voc\u00ea aprender\u00e1 como modificar esse c\u00f3digo de macro diretamente usando o editor do navegador do Apps Script.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"step-title\">Apresentando o editor de script<\/h3>\n<p>Conforme voc\u00ea cria uma macro, o Planilhas Google salva suas a\u00e7\u00f5es como uma fun\u00e7\u00e3o do Apps Script.\u00a0Quando voc\u00ea ativa a macro, o Planilhas Google chama a fun\u00e7\u00e3o Apps Script para realizar as mesmas a\u00e7\u00f5es na mesma ordem.<\/p>\n<p>&nbsp;<\/p>\n<h4>Olhando para o editor de script<\/h4>\n<p>Agora que voc\u00ea criou uma macro, pode examinar seu c\u00f3digo.\u00a0Voc\u00ea pode examinar seu script de macro selecionando\u00a0Ferramentas&gt; Editor de scripts\u00a0para abrir um editor de c\u00f3digo do navegador para Apps Script.<\/p>\n<p class=\"image-container\"><img style=\"outline: none !important; vertical-align: middle; border: 0px;\" title=\"Imagem: Ferramentas&gt; Editor de Script\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/d9e99fe03c37ac87.png\" \/><\/p>\n<p>\u00a0 \u00a0 Agora voc\u00ea pode ver o editor de script!\u00a0O editor de script permite que voc\u00ea escreva c\u00f3digos no Apps Script e execute esses scripts nos servidores do Google.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/dbaae5fbf08f872c.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>O editor de script mostrado acima tem v\u00e1rios componentes:<\/p>\n<ul>\n<li>Um\u00a0t\u00edtulo de projeto\u00a0ou nome do projeto de script que cont\u00e9m seus scripts.<\/li>\n<li>Um\u00a0menu\u00a0ou lista de opera\u00e7\u00f5es relacionadas ao seu projeto.<\/li>\n<li>Uma\u00a0barra de tarefas\u00a0ou lista de opera\u00e7\u00f5es relacionadas ao seu script, como\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>\u00a0Salvar\u00a0.<\/li>\n<li>Uma\u00a0barra lateral de script que\u00a0descreve os scripts do projeto.<\/li>\n<li>O\u00a0script atual\u00a0que mostra o script selecionado na barra lateral do script.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<aside class=\"warning\">\u00a0 \u00a0 Observa\u00e7\u00e3o:\u00a0as macros e scripts que voc\u00ea est\u00e1 criando neste codelab s\u00e3o anexados ao arquivo do Planilhas Google em que operam e podem ser acessados \u200b\u200ba qualquer momento em\u00a0Ferramentas\u00a0do Planilhas\u00a0&gt;\u00a0item de menu\u00a0Editor de scripts\u00a0.\u00a0Scripts anexados a uma Planilha Google como este s\u00e3o chamados de\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/bound\" target=\"_blank\" rel=\"noopener noreferrer\">vinculados ao cont\u00eainer<\/a>\u00a0.<\/aside>\n<p>&nbsp;<\/p>\n<h4><\/h4>\n<h4>Compreens\u00e3o\u00a0<code>macro.gs<\/code><\/h4>\n<p>A seguir, observe o\u00a0script atual.\u00a0O Sheets criou o\u00a0<code>macros.gs<\/code>\u00a0arquivo de script quando voc\u00ea gravou a\u00a0<code>Header<\/code>\u00a0macro, preenchendo-o com uma fun\u00e7\u00e3o correspondente do Apps Script chamada\u00a0<code>Header<\/code>.\u00a0Quando voc\u00ea ativa a macro, o Planilhas executa esta fun\u00e7\u00e3o.<\/p>\n<p>Observe a imagem abaixo para se familiarizar com a estrutura da fun\u00e7\u00e3o macro no Apps Script.\u00a0Nota: Seu c\u00f3digo pode parecer um pouco diferente se voc\u00ea registrou as etapas em uma ordem diferente ou clicou ao redor da planilha durante a grava\u00e7\u00e3o.<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/5d653a69a0897adf.png\" width=\"930\" height=\"229\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>A primeira linha \u00e9 um\u00a0coment\u00e1rio de\u00a0anota\u00e7\u00e3o\u00a0que afeta a autoriza\u00e7\u00e3o:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/** @OnlyCurrentDoc *\/<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>A maioria dos scripts pede ao usu\u00e1rio algum conjunto de\u00a0<em>permiss\u00f5es<\/em>\u00a0antes de poderem ser executados.\u00a0Essas permiss\u00f5es controlam o que o usu\u00e1rio est\u00e1 permitindo que o script fa\u00e7a.\u00a0Quando o\u00a0<code>@OnlyCurrentDoc<\/code>\u00a0coment\u00e1rio est\u00e1 presente em um projeto de script, o Apps Script s\u00f3 pede permiss\u00e3o para acessar e atualizar a planilha atual.\u00a0Sem esse coment\u00e1rio, o Apps Script solicitaria permiss\u00e3o para acessar e atualizar todas as planilhas do usu\u00e1rio.\u00a0\u00c9 sempre uma boa ideia incluir essa anota\u00e7\u00e3o quando voc\u00ea espera trabalhar apenas com um \u00fanico arquivo.\u00a0O gravador de macro adiciona este coment\u00e1rio automaticamente para voc\u00ea.<\/p>\n<p>Para come\u00e7ar a entender como o Apps Script representa as instru\u00e7\u00f5es de sua macro, voc\u00ea pode examinar a fun\u00e7\u00e3o:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"kwd\">function<\/span> <span class=\"typ\">Header<\/span><span class=\"pun\">(){<\/span>  \r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> spreadsheet <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActive<\/span><span class=\"pun\">();<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\r\n    spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getCurrentCell<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getRow<\/span><span class=\"pun\">(),<\/span>\r\n    <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getMaxColumns<\/span><span class=\"pun\">()).<\/span><span class=\"pln\">activate<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveRangeList<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setBackground<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#4c1130'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontColor<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#ffffff'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontWeight<\/span><span class=\"pun\">(<\/span><span class=\"str\">'bold'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setFrozenRows<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">};<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Este c\u00f3digo \u00e9 executado quando voc\u00ea ativa a\u00a0<code>Header<\/code>\u00a0macro!\u00a0A seguir\u00a0<code>function<\/code>, o r\u00f3tulo\u00a0<code>Header()<\/code>\u00a0define o nome da fun\u00e7\u00e3o e seus par\u00e2metros.\u00a0Reconhe\u00e7a que\u00a0<code>Header()<\/code>\u00a0n\u00e3o requer par\u00e2metros, pois fun\u00e7\u00f5es de macro no Apps Script n\u00e3o precisam de entradas. Os colchetes sempre incluem o corpo de uma fun\u00e7\u00e3o no Apps Script.<\/p>\n<p>Os codelabs posteriores nesta lista de reprodu\u00e7\u00e3o explicam as classes e conceitos envolvidos na cria\u00e7\u00e3o da macro.\u00a0Mas, por enquanto, voc\u00ea pode percorrer as seguintes descri\u00e7\u00f5es de c\u00f3digo para ter uma id\u00e9ia\u00a0geral\u00a0de seus componentes e sua fun\u00e7\u00e3o na constru\u00e7\u00e3o de sua macro.\u00a0Considere a primeira linha:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"kwd\">var<\/span><span class=\"pln\"> spreadsheet <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActive<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Aqui,\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/spreadsheet-app#getactive\" target=\"_blank\" rel=\"noopener noreferrer\"><code>getActive()<\/code><\/a>\u00a0retorna um objeto que representa o\u00a0arquivo de planilha\u00a0ativa\u00a0atual\u00a0no Planilhas e o define para a nova vari\u00e1vel\u00a0<code>spreadsheet.<\/code><\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\nsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\r\n    spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getCurrentCell<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getRow<\/span><span class=\"pun\">(),<\/span>\r\n    <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getMaxColumns<\/span><span class=\"pun\">()).<\/span><span class=\"pln\">activate<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Essas linhas correspondem \u00e0 a\u00e7\u00e3o de clicar na primeira linha para destac\u00e1-la.\u00a0Isso \u00e9 chamado de\u00a0<em>ativa\u00e7\u00e3o<\/em>\u00a0.\u00a0A primeira linha armazena a planilha atual na vari\u00e1vel\u00a0<code>sheet<\/code>, enquanto a segunda linha obt\u00e9m a primeira linha inteira usando o\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/sheet#getrangerow,-column,-numrows,-numcolumns\" target=\"_blank\" rel=\"noopener noreferrer\"><code>getRange()<\/code><\/a>\u00a0m\u00e9todo e depois chama\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range#activate()\" target=\"_blank\" rel=\"noopener noreferrer\"><code>activate()<\/code><\/a>\u00a0para ativ\u00e1-la.\u00a0A primeira linha \u00e9 especificada usando os n\u00fameros espec\u00edficos de linha e coluna.\u00a0A\u00a0<code>spreadsheet.getCurrentCell().getRow()<\/code>\u00a0chamada retorna o n\u00famero da linha atual, enquanto\u00a0<code>sheet.getMaxColumns()<\/code>\u00a0retorna o n\u00famero m\u00e1ximo de colunas na planilha.<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"pln\">spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveRangeList<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setBackground<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#4c1130'<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">.<\/span><span class=\"pln\">setFontColor<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#ffffff'<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">.<\/span><span class=\"pln\">setFontWeight<\/span><span class=\"pun\">(<\/span><span class=\"str\">'bold'<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Esse peda\u00e7o de c\u00f3digo fica mais complexo.\u00a0Para chamar eficiente m\u00e9todos com\u00a0<code>spreadsheet<\/code>, o c\u00f3digo pilhas tr\u00eas m\u00e9todos Onto\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/spreadsheet#getActiveRangeList()\" target=\"_blank\" rel=\"noopener noreferrer\"><code>getActiveRangeList()<\/code><\/a>\u00a0para evitar que o c\u00f3digo redundante chamando\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/spreadsheet#getActiveRangeList()\" target=\"_blank\" rel=\"noopener noreferrer\"><code>getActiveRangeList()<\/code><\/a>\u00a0em\u00a0<code>spreadsheet<\/code>\u00a0mais de uma vez.\u00a0Conforme voc\u00ea codifica cada vez mais usando o Apps Script, pode se familiarizar mais com esta conven\u00e7\u00e3o de chamar v\u00e1rios m\u00e9todos em uma classe (tamb\u00e9m conhecido como\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Method_chaining\" target=\"_blank\" rel=\"noopener noreferrer\">encadeamento de m\u00e9todo<\/a>\u00a0).\u00a0Por enquanto, voc\u00ea pode ler o seguinte para obter breves explica\u00e7\u00f5es sobre cada m\u00e9todo no bloco de c\u00f3digo:<\/p>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/spreadsheet#getActiveRangeList()\" target=\"_blank\" rel=\"noopener noreferrer\"><code>getActiveRangeList()<\/code><\/a>\u00a0retorna o ativo atual\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range-list\" target=\"_blank\" rel=\"noopener noreferrer\"><code>RangeList<\/code><\/a>\u00a0em\u00a0<code>spreadsheet<\/code>.\u00a0Neste caso, \u00e9 simplesmente a primeira linha que a linha anterior ativou.<\/li>\n<li>Os\u00a0m\u00e9todos\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range#setbackgroundcolor\" target=\"_blank\" rel=\"noopener noreferrer\"><code>setBackground(color)<\/code><\/a>\u00a0e\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range#setfontcolorcolor\" target=\"_blank\" rel=\"noopener noreferrer\"><code>setFontColor(color)<\/code><\/a>\u00a0alteram os atributos de cor das c\u00e9lulas no intervalo ativo.<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range#setfontweightfontweight\" target=\"_blank\" rel=\"noopener noreferrer\"><code>setFontWeight(fontWeight<\/code><\/a><code>)<\/code>ajusta o peso da fonte para c\u00e9lulas no intervalo ativo.<\/li>\n<\/ul>\n<p>Por \u00faltimo, a linha final congela a primeira linha da macro:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"pln\">spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setFrozenRows<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>E esse \u00e9 o script que voc\u00ea gerou quando gravou sua macro!\u00a0N\u00e3o se preocupe com quaisquer termos ou m\u00e9todos desconhecidos mencionados acima.\u00a0O objetivo da descri\u00e7\u00e3o \u00e9 fazer com que voc\u00ea pense sobre algumas das ideias em que o Apps Script se concentra em uma fun\u00e7\u00e3o t\u00edpica de macros e em quais t\u00f3picos futuros codelabs se aprofundar\u00e3o.<\/p>\n<p>A pr\u00f3xima se\u00e7\u00e3o se concentra na manipula\u00e7\u00e3o\u00a0<code>Header()<\/code>\u00a0do c\u00f3digo de para mostrar como voc\u00ea pode usar o editor de script para personalizar ainda mais as macros.<\/p>\n<p>&nbsp;<\/p>\n<h4>Personaliza\u00e7\u00e3o de macros com Apps Script<\/h4>\n<p>O editor do Apps Script mostra a macro que voc\u00ea criou anteriormente no Planilhas Google.\u00a0Ajustando o conte\u00fado do corpo da fun\u00e7\u00e3o, voc\u00ea pode personalizar ainda mais as instru\u00e7\u00f5es da macro para realizar a\u00e7\u00f5es diferentes ou adicionais.\u00a0Os exerc\u00edcios a seguir demonstram v\u00e1rias maneiras de manipular macros com o editor de script.<\/p>\n<h5>Mudar as c\u00e9lulas afetadas<\/h5>\n<p>Suponha que voc\u00ea queira ajustar sua macro para que ela afete apenas as primeiras 10 colunas da primeira linha, em vez de toda a linha.\u00a0Voc\u00ea pode excluir a macro e regrav\u00e1-la.\u00a0Mas, usando o editor do Apps Script, voc\u00ea pode fazer essas altera\u00e7\u00f5es diretamente.\u00a0Esta \u00e9 uma maneira de fazer isso:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>No editor de script, substitua\u00a0<code>sheet.getMaxColumns()<\/code>\u00a0por\u00a0<code>10<\/code>\u00a0na linha 6. Esta edi\u00e7\u00e3o altera o\u00a0intervalo\u00a0de c\u00e9lulas que a macro afeta na planilha.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/** @OnlyCurrentDoc *\/<\/span>\r\n\r\n<span class=\"kwd\">function<\/span> <span class=\"typ\">Header<\/span><span class=\"pun\">(){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> spreadsheet <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActive<\/span><span class=\"pun\">();<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\r\n    spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getCurrentCell<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getRow<\/span><span class=\"pun\">(),<\/span>\r\n    <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">10<\/span><span class=\"pun\">).<\/span><span class=\"pln\">activate<\/span><span class=\"pun\">();<\/span>\r\n    <span class=\"com\">\/* sheet.getMaxColumns() replaced with 10.*\/<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveRangeList<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setBackground<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#4c1130'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontColor<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#ffffff'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontWeight<\/span><span class=\"pun\">(<\/span><span class=\"str\">'bold'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setFrozenRows<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<ol start=\"2\" type=\"1\">\n<li>Select\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>,\u00a0File&gt; Save\u00a0, ou\u00a0Ctrl + S\u00a0(\u00a0Cmd + S\u00a0em Macs) para salvar seu script.\u00a0Em seguida, voc\u00ea testar\u00e1 a macro editada.<\/li>\n<li>Pode aparecer um prompt para solicitar um nome de projeto.\u00a0Nesse caso, insira &#8220;Macros e fun\u00e7\u00f5es personalizadas&#8221; como o novo nome do projeto e clique em\u00a0OK.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/4cfb40f495cd10d4.png\" \/><\/p>\n<ol start=\"4\" type=\"1\">\n<li>Em Planilhas, clique em\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/9c9b0c19bf317e7f.png\" \/>ou\u00a0Adicionar planilha\u00a0para criar uma nova planilha.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/927c012b4e11475b.png\" \/><\/p>\n<ol start=\"5\" type=\"1\">\n<li>No editor de script, selecione\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/520b3b8ae24db874.png\" \/>ou\u00a0Executar&gt; Executar fun\u00e7\u00e3o&gt; Cabe\u00e7alho\u00a0para executar a fun\u00e7\u00e3o macro.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Gif: executar c\u00f3digo\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/d50e589a89bbf2ed.gif\" \/><\/p>\n<p>\u00a0 \u00a0 Em sua nova planilha, voc\u00ea dever\u00e1 ver o seguinte resultado:<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/8a58ba02535b2b9c.png\" width=\"921\" height=\"57\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Ao ajustar o intervalo ativo ou de destino, sua macro agora afeta apenas parte da primeira linha!\u00a0Muitos m\u00e9todos do Apps Script usam um intervalo ou nota\u00e7\u00e3o A1 como par\u00e2metro para especificar em quais c\u00e9lulas agir.<\/p>\n<p>Agora, \u00e9 hora de aprender a personalizar suas cores macro!<\/p>\n<p>&nbsp;<\/p>\n<h5>Mudando as cores de sua macro<\/h5>\n<p>Para ajud\u00e1-lo a projetar o esquema de cores de macros ou outros elementos no Planilhas, o Apps Script pode ajustar o preenchimento de um intervalo ou a cor do texto.\u00a0Siga as instru\u00e7\u00f5es a seguir para ver como voc\u00ea pode personalizar as cores de sua macro.<\/p>\n<p>Estas primeiras instru\u00e7\u00f5es se concentram na altera\u00e7\u00e3o da cor de fundo de sua macro:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Em Planilhas, volte para a planilha original (Planilha 1) que cont\u00e9m os dados.<\/li>\n<li>Clique na primeira linha para real\u00e7\u00e1-la.<\/li>\n<li>No editor de script, substitua\u00a0<code>#4c1130<\/code>\u00a0por\u00a0<code>#afeeee<\/code>\u00a0na linha 6. Esses valores representam cores diferentes usando a\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_colors\" target=\"_blank\" rel=\"noopener noreferrer\">nota\u00e7\u00e3o hexadecimal tripla<\/a>\u00a0.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/** @OnlyCurrentDoc *\/<\/span>\r\n\r\n<span class=\"kwd\">function<\/span> <span class=\"typ\">Header<\/span><span class=\"pun\">(){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> spreadsheet <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActive<\/span><span class=\"pun\">();<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\r\n    spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getCurrentCell<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getRow<\/span><span class=\"pun\">(),<\/span>\r\n    <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">10<\/span><span class=\"pun\">).<\/span><span class=\"pln\">activate<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveRangeList<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setBackground<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#afeeee'<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"com\">\/* #4c1130 replaced with #afeeee.*\/<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontColor<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#ffffff'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontWeight<\/span><span class=\"pun\">(<\/span><span class=\"str\">'bold'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setFrozenRows<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<ol start=\"4\" type=\"1\">\n<li>Select\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>,\u00a0File&gt; Save\u00a0, ou\u00a0Ctrl + S\u00a0(\u00a0Cmd + S\u00a0em Macs) para salvar seu script.<\/li>\n<li>Selecione\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/520b3b8ae24db874.png\" \/>ou\u00a0Executar&gt; Executar fun\u00e7\u00e3o&gt; Cabe\u00e7alho\u00a0para compilar e executar o script.<\/li>\n<\/ol>\n<p>No Planilhas, o preenchimento do plano de fundo das primeiras 10 colunas na primeira linha muda para uma cor turquesa personalizada, conforme mostrado aqui:<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Imagem: fundo macro recolorido\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/bbd26f7c8e35039.png\" width=\"929\" height=\"194\" \/><\/p>\n<p>\u00a0 \u00a0 Ao mudar a\u00a0<a href=\"https:\/\/www.w3schools.com\/colors\/colors_picker.asp\" target=\"_blank\" rel=\"noopener noreferrer\">nota\u00e7\u00e3o de cor hex<\/a>\u00a0nos par\u00e2metros de\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range#setbackgroundcolor\" target=\"_blank\" rel=\"noopener noreferrer\"><code>setBackground(color)<\/code><\/a>\u00a0partir\u00a0<code>#4c1130<\/code>\u00a0(magenta escuro 3)\u00a0<code>#afeeee<\/code>\u00a0(turquesa p\u00e1lido, uma op\u00e7\u00e3o n\u00e3o est\u00e1 acess\u00edvel no menu de cores padr\u00e3o Sheets), voc\u00ea muda o atributo de cor da cor de fundo do seu macro.<\/p>\n<p>Voc\u00ea ajustou a cor de fundo definida por sua macro.\u00a0Suponha agora que voc\u00ea deseja alterar a cor do texto tamb\u00e9m, para tornar os r\u00f3tulos do cabe\u00e7alho mais vis\u00edveis.\u00a0Voc\u00ea pode fazer isso alterando o segundo c\u00f3digo de cor:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>No Planilhas, clique na primeira linha para verificar se ela ainda est\u00e1 destacada.<\/li>\n<li>No editor de script, substitua\u00a0<code>#ffffff<\/code>\u00a0por\u00a0<code>#191970<\/code>\u00a0na linha 8. Isso faz com que a macro defina uma cor de fonte azul marinho.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/** @OnlyCurrentDoc *\/<\/span>\r\n\r\n<span class=\"kwd\">function<\/span> <span class=\"typ\">Header<\/span><span class=\"pun\">(){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> spreadsheet <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActive<\/span><span class=\"pun\">();<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">\r\n    spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getCurrentCell<\/span><span class=\"pun\">().<\/span><span class=\"pln\">getRow<\/span><span class=\"pun\">(),<\/span>\r\n    <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">10<\/span><span class=\"pun\">).<\/span><span class=\"pln\">activate<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveRangeList<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setBackground<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#afeeee'<\/span><span class=\"pun\">)<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontColor<\/span><span class=\"pun\">(<\/span><span class=\"str\">'#191970'<\/span><span class=\"pun\">)<\/span><span class=\"com\">\/* #ffffff replaced with #191970.*\/<\/span>\r\n  <span class=\"pun\">.<\/span><span class=\"pln\">setFontWeight<\/span><span class=\"pun\">(<\/span><span class=\"str\">'bold'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n  spreadsheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getActiveSheet<\/span><span class=\"pun\">().<\/span><span class=\"pln\">setFrozenRows<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<ol start=\"3\" type=\"1\">\n<li>Select\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>,\u00a0File&gt; Save\u00a0, ou\u00a0Ctrl + S\u00a0(\u00a0Cmd + S\u00a0em Macs) para salvar seu script.<\/li>\n<li>Selecione\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/520b3b8ae24db874.png\" \/>ou\u00a0Executar&gt; Executar fun\u00e7\u00e3o&gt; Cabe\u00e7alho\u00a0para compilar e executar o script.<\/li>\n<\/ol>\n<p>Retorne ao Planilhas.\u00a0Veja que a cor do texto da linha do cabe\u00e7alho agora \u00e9 azul marinho!<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Imagem: texto macro recolorido\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/2eaf2fb4879e1b36.png\" width=\"930\" height=\"193\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Agora voc\u00ea viu como as macros s\u00e3o na verdade a\u00e7\u00f5es do Planilhas registradas como c\u00f3digo do Apps Script.\u00a0Na pr\u00f3xima se\u00e7\u00e3o, voc\u00ea ver\u00e1 outra maneira como o Apps Script pode ajud\u00e1-lo a trabalhar com o Planilhas Google:\u00a0<em>fun\u00e7\u00f5es personalizadas<\/em>\u00a0.<\/p>\n<p>&nbsp;<\/p>\n<p>Codificando seu primeiro script: Fun\u00e7\u00f5es personalizadas<\/p>\n<p>Como a maioria dos aplicativos de planilha, o Planilhas Google tem v\u00e1rias fun\u00e7\u00f5es de f\u00f3rmulas integradas, como a\u00a0<code>=SUM()<\/code>\u00a0que permite c\u00e1lculos r\u00e1pidos nos dados da planilha.\u00a0Fun\u00e7\u00f5es personalizadas\u00a0s\u00e3o simplesmente fun\u00e7\u00f5es que voc\u00ea mesmo define, usando o Apps Script.\u00a0Depois de definir uma fun\u00e7\u00e3o personalizada, voc\u00ea pode us\u00e1-la em qualquer lugar da planilha, como uma fun\u00e7\u00e3o interna.<\/p>\n<p>Esta se\u00e7\u00e3o mostra como criar uma fun\u00e7\u00e3o personalizada no Apps Script que faz uma convers\u00e3o monet\u00e1ria.<\/p>\n<p>&nbsp;<\/p>\n<h4>Cria\u00e7\u00e3o de um novo arquivo de script<\/h4>\n<p>Com a mesma planilha e projeto de script usados \u200b\u200bna se\u00e7\u00e3o Macros, voc\u00ea pode seguir estas instru\u00e7\u00f5es para aprender como fazer um novo script (que voc\u00ea pode eventualmente usar para fazer sua primeira fun\u00e7\u00e3o personalizada!):<\/p>\n<ol start=\"1\" type=\"1\">\n<li>No editor de script, selecione\u00a0Arquivo&gt; Novo&gt; Arquivo de script\u00a0.<\/li>\n<li>Nomeie o novo arquivo de script\u00a0<code>customFunctions<\/code>\u00a0(o Apps Script acrescenta automaticamente uma\u00a0<code>.gs<\/code>\u00a0extens\u00e3o ao nome do arquivo de script).<\/li>\n<\/ol>\n<p>Uma nova guia nomeada\u00a0<code>customFunctions.gs<\/code>\u00a0dentro do editor deve aparecer:<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/492f955295d8c4ac.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Sempre que voc\u00ea cria um novo script, o editor gera automaticamente um padr\u00e3o\u00a0<code>myFunction()<\/code>para sua conveni\u00eancia.<\/p>\n<p>Agora que voc\u00ea criou um script especificamente para fun\u00e7\u00f5es personalizadas, pode preench\u00ea-lo com c\u00f3digo.<\/p>\n<p>&nbsp;<\/p>\n<h4>Convers\u00e3o de d\u00f3lares americanos em francos su\u00ed\u00e7os<\/h4>\n<p>Suponha que voc\u00ea queira ajustar os dados de &#8216;Dez filmes de maior bilheteria de 2018&#8217; para mostrar n\u00e3o apenas os valores brutos em d\u00f3lares americanos, mas tamb\u00e9m em francos su\u00ed\u00e7os.\u00a0Com fun\u00e7\u00f5es personalizadas, voc\u00ea pode fazer isso facilmente.\u00a0O exerc\u00edcio a seguir demonstra como criar uma fun\u00e7\u00e3o personalizada para converter matematicamente seus valores em d\u00f3lares para valores em francos.<\/p>\n<p>Antes de escrever sua primeira fun\u00e7\u00e3o personalizada, ajuste seu conjunto de dados para permitir que a fun\u00e7\u00e3o demonstre uma sa\u00edda adequada.\u00a0Para fazer isso:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Em folhas, clique com o bot\u00e3o direito\u00a0coluna H.<\/li>\n<li>No menu resultante, clique em\u00a0Inserir 1 \u00e0 direita.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img style=\"outline: none !important; vertical-align: middle; border: 0px;\" title=\"Gif: clique com o bot\u00e3o direito em H&gt; Inserir 1 \u00e0 direita \" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/fc1421cb1c456e52.gif\" \/><\/p>\n<ol start=\"3\" type=\"1\">\n<li>Identifique a coluna &#8220;Worldwide_Gross (francos su\u00ed\u00e7os)&#8221; na c\u00e9lula\u00a0I1\u00a0.<\/li>\n<\/ol>\n<p>Agora voc\u00ea tem uma coluna que pode armazenar os resultados de sua fun\u00e7\u00e3o personalizada de convers\u00e3o.\u00a0Em seguida, voc\u00ea pode usar o editor de script para criar sua primeira fun\u00e7\u00e3o personalizada!<\/p>\n<ol start=\"4\" type=\"1\">\n<li>Em\u00a0<code>customFunction.gs<\/code>, substitua o c\u00f3digo de\u00a0<code>myFunction()<\/code>pelo seguinte c\u00f3digo:<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/**\r\n * Converts US dollars to Swiss francs.\r\n * \r\n * @param {number} dollars The total number of dollars.\r\n * @return {number} swissFrancs The converted total of Swiss francs.\r\n * @customfunction\r\n *\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> USDTOCHF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">dollars<\/span><span class=\"pun\">){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> swissFrancs <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dollars <\/span><span class=\"pun\">*<\/span> <span class=\"pun\">.<\/span><span class=\"lit\">99<\/span><span class=\"pun\">;<\/span> \r\n  <span class=\"kwd\">return<\/span><span class=\"pln\"> swissFrancs<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Este \u00e9 o c\u00f3digo que converter\u00e1 d\u00f3lares americanos em francos su\u00ed\u00e7os.\u00a0Experimente as instru\u00e7\u00f5es abaixo e veja como voc\u00ea pode executar uma fun\u00e7\u00e3o personalizada em planilhas.<\/p>\n<ol start=\"5\" type=\"1\">\n<li>Select\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>,\u00a0File&gt; Save\u00a0, ou\u00a0Ctrl + S\u00a0(\u00a0Cmd + S\u00a0em Macs) para salvar seu script.<\/li>\n<li>Em Planilhas, selecione a\u00a0c\u00e9lula\u00a0I2\u00a0.<\/li>\n<li>Na barra de fun\u00e7\u00f5es, digite\u00a0<code>=USDTOCHF(H2)<\/code>.<\/li>\n<\/ol>\n<p>Para aplicar a f\u00f3rmula ao resto das c\u00e9lulas na coluna:<\/p>\n<ol start=\"8\" type=\"1\">\n<li>Mova seu cursor para o canto inferior direito da\u00a0c\u00e9lula\u00a0I2\u00a0e selecione a pequena caixa azul (seu cursor deve se transformar em\u00a0<img title=\"Cruz negra\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/9c9b0c19bf317e7f.png\" \/>\u00a0quando passar o mouse sobre a caixa azul).<\/li>\n<li>Clique e arraste a caixa azul para baixo para destacar o\u00a0I3\u00a0:\u00a0I11\u00a0.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Gif: Aplicando f\u00f3rmula\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/3cf46560d6cea0de.gif\" \/><\/p>\n<p>\u00a0 \u00a0 A coluna I agora lista as convers\u00f5es em francos su\u00ed\u00e7os dos valores em d\u00f3lares americanos da coluna G!<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7fc06b3d7e3e2a9.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Parab\u00e9ns, voc\u00ea criou sua primeira fun\u00e7\u00e3o personalizada.\u00a0A pr\u00f3xima se\u00e7\u00e3o explica o c\u00f3digo que cont\u00e9m\u00a0<code>USDTOCHF()<\/code>.<\/p>\n<p>&nbsp;<\/p>\n<h4>Analisando a fun\u00e7\u00e3o\u00a0<code>USDTOCHF()<\/code><\/h4>\n<p>Come\u00e7ando do in\u00edcio do c\u00f3digo, voc\u00ea pode reconhecer os coment\u00e1rios detalhando a finalidade do c\u00f3digo:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/**\r\n * Converts US dollars to Swiss francs.\r\n * \r\n * @param {number} dollars The total number of dollars.\r\n * @return {number} swissFrancs The provided value in Swiss francs.\r\n * @customfunction\r\n *\/<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Blocos de coment\u00e1rios como este s\u00e3o usados \u200b\u200bcom freq\u00fc\u00eancia na programa\u00e7\u00e3o para explicar o que as fun\u00e7\u00f5es fazem.<\/p>\n<p>Neste coment\u00e1rio, voc\u00ea pode identificar duas partes: a descri\u00e7\u00e3o da fun\u00e7\u00e3o (para converter d\u00f3lares em francos) e as anota\u00e7\u00f5es que descrevem os par\u00e2metros da fun\u00e7\u00e3o e o tipo de retorno.<\/p>\n<p>Com as anota\u00e7\u00f5es, o Apps Script utiliza\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/JSDoc\" target=\"_blank\" rel=\"noopener noreferrer\">JSDoc<\/a>\u00a0para ajud\u00e1-lo a documentar e criar dicas de preenchimento autom\u00e1tico para seu c\u00f3digo.\u00a0Voc\u00ea pode ler abaixo como cada anota\u00e7\u00e3o usada no\u00a0<code>USDTOCHF()<\/code>ajuda voc\u00ea no desenvolvimento do Apps Script:<\/p>\n<ul>\n<li><code>@param<\/code>: Voc\u00ea pode usar a\u00a0<code>@param0<\/code>\u00a0anota\u00e7\u00e3o para descrever cada par\u00e2metro passado para a fun\u00e7\u00e3o.<\/li>\n<li><code>@return<\/code>: Voc\u00ea pode utilizar a\u00a0<code>@return<\/code>\u00a0anota\u00e7\u00e3o para descrever o que a fun\u00e7\u00e3o retorna.<\/li>\n<li><code>@customfunction<\/code>: Voc\u00ea sempre deve adicionar\u00a0<code>@customfunction<\/code>\u00a0coment\u00e1rios de doc de qualquer fun\u00e7\u00e3o personalizada.\u00a0Esta anota\u00e7\u00e3o notifica o Planilhas para\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#autocomplete\" target=\"_blank\" rel=\"noopener noreferrer\">preencher automaticamente<\/a>\u00a0sua fun\u00e7\u00e3o personalizada, assim como o Planilhas preenche automaticamente\u00a0<a href=\"https:\/\/support.google.com\/docs\/answer\/46977?visit_id=636971670314047145-2078250078&amp;rd=1\" target=\"_blank\" rel=\"noopener noreferrer\">fun\u00e7\u00f5es integradas<\/a>\u00a0quando voc\u00ea digita o nome de uma fun\u00e7\u00e3o em uma c\u00e9lula, conforme mostrado abaixo:<\/li>\n<\/ul>\n<p class=\"image-container\"><img title=\"Gif: fun\u00e7\u00e3o personalizada USDTOCHF\" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/d8680ab6efae97ac.gif\" \/><\/p>\n<p>\u00a0 \u00a0 Observe que o texto que aparece no pop-up de preenchimento autom\u00e1tico corresponde exatamente ao texto de descri\u00e7\u00e3o que voc\u00ea colocou no bloco de coment\u00e1rios.\u00a0Voc\u00ea pode tornar suas fun\u00e7\u00f5es personalizadas mais f\u00e1ceis de usar, certificando-se de que as descri\u00e7\u00f5es criadas sejam bem escritas e completas.<\/p>\n<p>Em seguida, concentre-se no c\u00f3digo da fun\u00e7\u00e3o\u00a0<code>USDTOCHF()<\/code>:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"kwd\">function<\/span><span class=\"pln\"> USDTOCHF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">dollars<\/span><span class=\"pun\">){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> swissFrancs <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dollars <\/span><span class=\"pun\">*<\/span> <span class=\"pun\">.<\/span><span class=\"lit\">99<\/span><span class=\"pun\">;<\/span> \r\n  <span class=\"kwd\">return<\/span><span class=\"pln\"> swissFrancs<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Conforme mencionado anteriormente,\u00a0<code>USDTOCHF()<\/code>\u00a0pega a vari\u00e1vel num\u00e9rica d\u00f3lares e retorna esse valor convertido em francos su\u00ed\u00e7os na vari\u00e1vel num\u00e9rica\u00a0<code>swissFrancs<\/code>, multiplicando-o por uma taxa de c\u00e2mbio fixa.\u00a0O par\u00e2metro de entrada \u00e9 o valor contido na c\u00e9lula que voc\u00ea especificou ao adicionar a fun\u00e7\u00e3o personalizada a uma c\u00e9lula.\u00a0Neste exemplo, os valores em d\u00f3lares de entrada v\u00eam da coluna H. O valor de sa\u00edda\u00a0<code>swissFrancs<\/code>\u00a0\u00e9 colocado na c\u00e9lula da fun\u00e7\u00e3o (ou seja, coluna I neste exemplo).<\/p>\n<p>As fun\u00e7\u00f5es personalizadas podem funcionar com valores num\u00e9ricos ou de string, como voc\u00ea ver\u00e1 na pr\u00f3xima se\u00e7\u00e3o.<\/p>\n<p>&nbsp;<\/p>\n<h4>Concatenando um prefixo de string<\/h4>\n<p>Suponha que voc\u00ea queira que a sa\u00edda num\u00e9rica da fun\u00e7\u00e3o\u00a0<code>USDTOCHF()<\/code>inclua o prefixo do franco su\u00ed\u00e7o\u00a0<code>CHF<\/code>.\u00a0Voc\u00ea pode fazer isso com o Apps Script usando o operador de concatena\u00e7\u00e3o (\u00a0<code>+<\/code>),\u00a0<code>,<\/code>conforme mostrado nas seguintes instru\u00e7\u00f5es:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>No editor de script, mude\u00a0<code>return var<\/code>\u00a0na linha 10 para\u00a0<code>return<\/code>\u00a0<code>'CHF' + swissFrancs<\/code>.<\/li>\n<\/ol>\n<p>O\u00a0<code>+<\/code>operador anexa a string\u00a0<code>CHF<\/code>\u00a0\u00e0 frente do valor contido em\u00a0<code>swissFrancs<\/code>.\u00a0Seu c\u00f3digo agora deve ter a seguinte apar\u00eancia:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"com\">\/**\r\n * Converts US dollars to Swiss francs.\r\n * \r\n * @param {number} dollars The total number of dollars.\r\n * @return {number} swissFrancs The provided value in Swiss francs.\r\n * @customfunction\r\n *\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> USDTOCHF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">dollars<\/span><span class=\"pun\">){<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> swissFrancs <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dollars <\/span><span class=\"pun\">*<\/span> <span class=\"pun\">.<\/span><span class=\"lit\">99<\/span><span class=\"pun\">;<\/span> \r\n  <span class=\"kwd\">return<\/span> <span class=\"str\">'CHF'<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> swissFrancs<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Reveja as etapas abaixo, para que voc\u00ea possa salvar e executar sua fun\u00e7\u00e3o para ver os resultados!<\/p>\n<ol start=\"2\" type=\"1\">\n<li>Select\u00a0<img src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/7aacb735bfe92438.png\" \/>,\u00a0File&gt; Save\u00a0, ou\u00a0Ctrl + S\u00a0(\u00a0Cmd + S\u00a0em Macs) para salvar seu script.<\/li>\n<\/ol>\n<p>O franco su\u00ed\u00e7o agora prefixa os valores da coluna I:<\/p>\n<p>&nbsp;<\/p>\n<p class=\"image-container\"><img title=\"Coluna I \" src=\"https:\/\/codelabs.developers.google.com\/codelabs\/apps-script-fundamentals-1\/img\/20e4bfb7f0a994ea.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Voc\u00ea atualizou sua fun\u00e7\u00e3o personalizada que agora n\u00e3o apenas converte d\u00f3lares americanos em francos su\u00ed\u00e7os, mas tamb\u00e9m gera a moeda com um prefixo de string.<\/p>\n<p>&nbsp;<\/p>\n<h4>Avan\u00e7ado: Buscando dados externos<\/h4>\n<p>Este \u00e9 um bom come\u00e7o para uma fun\u00e7\u00e3o personalizada b\u00e1sica, mas este exemplo pressup\u00f5e que a taxa de c\u00e2mbio de d\u00f3lares para francos su\u00ed\u00e7os \u00e9 constante.\u00a0Suponha que, em vez disso, voc\u00ea queira que a\u00a0taxa de c\u00e2mbio\u00a0<em>atual<\/em>\u00a0sempre seja usada, de modo que, sempre que a planilha for recarregada, os valores sejam recalculados para representar a convers\u00e3o atual.\u00a0Para fazer isso, voc\u00ea precisa de um meio de descobrir qual \u00e9 a taxa de c\u00e2mbio atual.\u00a0Essas informa\u00e7\u00f5es n\u00e3o est\u00e3o dispon\u00edveis no Planilhas Google, mas felizmente voc\u00ea pode usar o Apps Script para obt\u00ea-las!<\/p>\n<p>Voc\u00ea pode usar o c\u00f3digo abaixo para obter a taxa de convers\u00e3o atual de francos su\u00ed\u00e7os em d\u00f3lares americanos:<\/p>\n<p>&nbsp;<\/p>\n<pre><code><span class=\"kwd\">function<\/span><span class=\"pln\"> USDTOCHF<\/span><span class=\"pun\">(<\/span><span class=\"pln\">dollars<\/span><span class=\"pun\">){<\/span>\r\n  <span class=\"com\">\/\/ Gets a cache that is common to all users of the script.<\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> cache <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">CacheService<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getScriptCache<\/span><span class=\"pun\">();<\/span>\r\n\r\n  <span class=\"com\">\/\/ Accesses the memory location (rates.CHF) of the script cache. <\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> rate <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> cache<\/span><span class=\"pun\">.<\/span><span class=\"kwd\">get<\/span><span class=\"pun\">(<\/span><span class=\"str\">'rates.CHF'<\/span><span class=\"pun\">);<\/span>\r\n\r\n  <span class=\"com\">\/\/ If a cache miss occurs, the program fetches the current<\/span>\r\n  <span class=\"com\">\/\/ CHF rate from an API and stores that rate in the cache<\/span>\r\n  <span class=\"com\">\/\/ for later convenience. <\/span>\r\n  <span class=\"kwd\">if<\/span> <span class=\"pun\">(!<\/span><span class=\"pln\">rate<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\r\n    <span class=\"kwd\">var<\/span><span class=\"pln\"> response <\/span><span class=\"pun\">=<\/span>\r\n<span class=\"typ\">UrlFetchApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">fetch<\/span><span class=\"pun\">(<\/span><span class=\"str\">'https:\/\/api.exchangeratesapi.io\/latest?base=USD'<\/span><span class=\"pun\">);<\/span>\r\n    <span class=\"kwd\">var<\/span><span class=\"pln\"> result <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> JSON<\/span><span class=\"pun\">.<\/span><span class=\"pln\">parse<\/span><span class=\"pun\">(<\/span><span class=\"pln\">response<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getContentText<\/span><span class=\"pun\">());<\/span><span class=\"pln\">\r\n    rate <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> result<\/span><span class=\"pun\">.<\/span><span class=\"pln\">rates<\/span><span class=\"pun\">.<\/span><span class=\"pln\">CHF<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n    cache<\/span><span class=\"pun\">.<\/span><span class=\"pln\">put<\/span><span class=\"pun\">(<\/span><span class=\"str\">'rates.CHF'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> rate<\/span><span class=\"pun\">);<\/span>\r\n  <span class=\"pun\">}<\/span>\r\n  <span class=\"com\">\/\/ Converts dollars to CHF according to the latest rate. <\/span>\r\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> swissFrancs <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dollars <\/span><span class=\"pun\">*<\/span><span class=\"pln\"> rate<\/span><span class=\"pun\">;<\/span>\r\n  <span class=\"com\">\/\/ Returns the CHF value. <\/span>\r\n  <span class=\"kwd\">return<\/span> <span class=\"str\">'CHF'<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> swissFrancs<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Este c\u00f3digo obt\u00e9m a taxa de c\u00e2mbio atual de um servidor de informa\u00e7\u00f5es financeiras usando a\u00a0<a href=\"https:\/\/exchangeratesapi.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">API de taxa de c\u00e2mbio de<\/a>\u00a0terceiros\u00a0.\u00a0Isso \u00e9 feito usando servi\u00e7os do Apps Script como\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/url-fetch\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>UrlFetchApp<\/code><\/a>\u00a0e\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/cache\/cache-service\" target=\"_blank\" rel=\"noopener noreferrer\"><code>CacheService<\/code><\/a>.\u00a0Esses conceitos avan\u00e7ados est\u00e3o fora do escopo deste codelab espec\u00edfico, mas voc\u00ea pode come\u00e7ar a ver a versatilidade do Apps Script para automatizar tarefas complexas no Planilhas Google.<\/p>\n<p>&nbsp;<\/p>\n<h4>Diretrizes de fun\u00e7\u00e3o personalizada<\/h4>\n<p>Parab\u00e9ns por completar os exerc\u00edcios para fun\u00e7\u00f5es personalizadas.\u00a0\u00c0 medida que voc\u00ea usa fun\u00e7\u00f5es personalizadas em seus projetos, \u00e9 importante entender que elas t\u00eam certas restri\u00e7\u00f5es.\u00a0A lista a seguir resume as limita\u00e7\u00f5es detalhadas no\u00a0guia\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#guidelines_for_custom_functions\" target=\"_blank\" rel=\"noopener noreferrer\">Fun\u00e7\u00f5es personalizadas no Planilhas Google<\/a>\u00a0:<\/p>\n<ul>\n<li>N\u00e3o crie fun\u00e7\u00f5es personalizadas que exijam autoriza\u00e7\u00e3o do usu\u00e1rio\u00a0.\u00a0Em vez disso, crie suas fun\u00e7\u00f5es personalizadas para cumprir tarefas mais simples, como c\u00e1lculos de dados de amostra, edi\u00e7\u00e3o de texto, etc. Consulte\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#advanced\" target=\"_blank\" rel=\"noopener noreferrer\">Como usar os servi\u00e7os do Apps Script<\/a>\u00a0.<\/li>\n<li>N\u00e3o nomeie uma fun\u00e7\u00e3o personalizada da mesma forma que outra fun\u00e7\u00e3o interna, ou termine o nome com um sublinhado.\u00a0Consulte as\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#naming\" target=\"_blank\" rel=\"noopener noreferrer\">diretrizes de nomenclatura<\/a>\u00a0.<\/li>\n<li>N\u00e3o passe argumentos vari\u00e1veis \u200b\u200bpara fun\u00e7\u00f5es personalizadas.\u00a0Voc\u00ea s\u00f3 pode passar valores determin\u00edsticos (valor fixo) para fun\u00e7\u00f5es personalizadas como argumentos.\u00a0Passar argumentos vari\u00e1veis, como o resultado de\u00a0<code>=RAND()<\/code>, interromper\u00e1 a fun\u00e7\u00e3o personalizada.\u00a0Consulte as\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#arguments\" target=\"_blank\" rel=\"noopener noreferrer\">diretrizes de Argumentos<\/a>\u00a0.<\/li>\n<li>N\u00e3o crie fun\u00e7\u00f5es que levem mais de 30 segundos para serem conclu\u00eddas.\u00a0Se demorar mais, ocorrer\u00e1 um erro, portanto, mantenha o c\u00f3digo da fun\u00e7\u00e3o simples e limitado em escopo.\u00a0\u00c9 melhor manter os c\u00e1lculos realizados nas fun\u00e7\u00f5es personalizadas o mais simples poss\u00edvel.\u00a0Consulte as\u00a0<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions#return_values\" target=\"_blank\" rel=\"noopener noreferrer\">diretrizes de valores de retorno<\/a>\u00a0.<\/li>\n<\/ul>\n<p>Agora voc\u00ea pode melhorar suas planilhas usando o editor de scripts para trabalhar com macros e criar fun\u00e7\u00f5es personalizadas!\u00a0Na pr\u00f3xima e \u00faltima se\u00e7\u00e3o, voc\u00ea pode revisar o que aprendeu e o que pode fazer a seguir para melhorar suas habilidades de script.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Conclus\u00e3o<\/p>\n<p>Voc\u00ea concluiu o primeiro codelab de Fundamentos do Apps Script.\u00a0Ao criar e editar macros e fun\u00e7\u00f5es personalizadas do Planilhas, voc\u00ea aprendeu os conceitos b\u00e1sicos do Apps Script.\u00a0Voc\u00ea pode expandir ainda mais seus conhecimentos sobre o Apps Script no pr\u00f3ximo codelab!<\/p>\n<p>&nbsp;<\/p>\n<div class=\"survey-questions\">\n<div class=\"survey-question-wrapper\">\n<h4>Nesse tutorial voc\u00ea viu:<\/h4>\n<\/div>\n<\/div>\n<ul class=\"checklist\">\n<li>Conceitos b\u00e1sicos do Apps Script.<\/li>\n<li>Como navegar no editor de scripts.<\/li>\n<li>Como criar e atualizar macros do Planilhas.<\/li>\n<li>Como criar fun\u00e7\u00f5es personalizadas para o Planilhas Google.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Termos chave importante:<\/p>\n<aside class=\"special\">\n<ul>\n<li>Refer\u00eancia absoluta\u00a0: Uma configura\u00e7\u00e3o de grava\u00e7\u00e3o de macro que especifica que as a\u00e7\u00f5es de macro gravadas s\u00e3o aplicadas \u00e0s c\u00e9lulas exatas usadas na grava\u00e7\u00e3o.<\/li>\n<li>Ativo (status)\u00a0: indica que a planilha, planilha, intervalo ou c\u00e9lula especificada \u00e9 a que est\u00e1 sendo exibida ou destacada pelo usu\u00e1rio da planilha.<\/li>\n<li>Apps Script\u00a0: uma plataforma de desenvolvimento r\u00e1pido de aplicativos, baseada em JavaScript, que torna mais r\u00e1pido e f\u00e1cil estender os aplicativos do G Suite e automatizar o trabalho.<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/guides\/services\/authorization\" target=\"_blank\" rel=\"noopener noreferrer\">Autoriza\u00e7\u00e3o<\/a>\u00a0: o processo do usu\u00e1rio que concede permiss\u00f5es para permitir que um script acesse os dados do usu\u00e1rio ou execute a\u00e7\u00f5es em nome do usu\u00e1rio.<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/guides\/bound\" target=\"_blank\" rel=\"noopener noreferrer\">Script vinculado ao cont\u00eainer<\/a>\u00a0: qualquer script vinculado e criado a partir de um documento do G Suite, como uma planilha ou um documento do Google.<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/guides\/sheets\/functions\" target=\"_blank\" rel=\"noopener noreferrer\">Fun\u00e7\u00f5es personalizadas<\/a>\u00a0: f\u00f3rmulas definidas pelo usu\u00e1rio no Apps Script que s\u00e3o usadas em planilhas para opera\u00e7\u00f5es simples.<\/li>\n<li>JSDoc\u00a0: uma linguagem de marca\u00e7\u00e3o usada para escrever notas explicativas sobre arquivos de origem JavaScript.<\/li>\n<li>Macro\u00a0: abrevia\u00e7\u00e3o de &#8220;macroinstru\u00e7\u00e3o&#8221;.\u00a0Uma s\u00e9rie gravada de a\u00e7\u00f5es do Planilhas Google que voc\u00ea pode repetir rapidamente usando um item de menu ou tecla de atalho.<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Method_chaining\" target=\"_blank\" rel=\"noopener noreferrer\">Encadeamento de m\u00e9todos<\/a>\u00a0: um idioma de programa\u00e7\u00e3o para invocar v\u00e1rias chamadas de m\u00e9todo no objeto, contando com o fato de que cada chamada de m\u00e9todo retorna o pr\u00f3prio objeto.<\/li>\n<li>Intervalo\u00a0: um agrupamento de 1 ou mais c\u00e9lulas adjacentes da planilha.<\/li>\n<li>Refer\u00eancia relativa\u00a0: uma configura\u00e7\u00e3o de grava\u00e7\u00e3o de macro que especifica que as a\u00e7\u00f5es de macro gravadas s\u00e3o aplicadas \u00e0s c\u00e9lulas em rela\u00e7\u00e3o \u00e0 sele\u00e7\u00e3o de c\u00e9lulas atual.<\/li>\n<li>Editor de script\u00a0: o editor de c\u00f3digo no navegador para Apps Script.<\/li>\n<li>Folha\u00a0: Uma \u00fanica p\u00e1gina de uma planilha (semelhante \u00e0s pastas de trabalho do Microsoft Excel).\u00a0\u00c0s vezes usado para se referir a um arquivo do Planilhas Google no Google Drive.<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/\" target=\"_blank\" rel=\"noopener noreferrer\">Servi\u00e7o de planilha<\/a>\u00a0: um<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u00a0servi\u00e7o do<\/a>\u00a0Apps Script que permite que os scripts criem, acessem e modifiquem arquivos do Planilhas Google.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<\/aside>\n","protected":false},"excerpt":{"rendered":"<p>O material \u00e0 seguir foi retirado e traduzido da p\u00e1gina de suporte ao desenvolvedor do Google, mais especificamente da se\u00e7\u00e3o Apps Script que \u00e9 a linguagem do Google utilizada na G Suite onde est\u00e1 inclu\u00eddo o Google Drive e as Planilhas do Google, trata-se de explica\u00e7\u00f5es b\u00e1sicas sobre o funcionamento dos scripts do Google, embora [&hellip;]<\/p>\n","protected":false},"author":667,"featured_media":0,"parent":349,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","footnotes":""},"class_list":["post-705","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/pages\/705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/users\/667"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/comments?post=705"}],"version-history":[{"count":4,"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/pages\/705\/revisions"}],"predecessor-version":[{"id":737,"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/pages\/705\/revisions\/737"}],"up":[{"embeddable":true,"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/pages\/349"}],"wp:attachment":[{"href":"https:\/\/wp.ufpel.edu.br\/planilhasgoogle\/wp-json\/wp\/v2\/media?parent=705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}