Usando Google Apps Script com planilhas

Como automatizar tarefas e integrar dados externos com Planilhas Google e Apps Script

Se tem uma coisa que todo profissional descobre é que quanto mais tempo de profissão, mais vai acabar tendo de utilizar planilhas. Ocorre que é muito normal ficarmos cercados por diversas planilhas e termos de criar lembretes para atualizar uma ou preencher outra. Porém, nem tudo precisa ser tão chato, podemos usar javascript no Google Apps Script para tornar nossa vida mais fácil no meio desse monte de planilhas.

O que é o Google Apps Script?

É uma solução que permite criar aplicativos facilmente integrados aos produtos Google, que ampliam as funcionalidades dos produtos Google e é possível até mesmo trazer dados de outras plataformas para os produtos Google e vou te mostrar como fazer isso.

Propondo um problema

Imagine que você tenha de diariamente extrair dados de uma API e enviar para seu superior ou resolve fazer isso programaticamente. Para esse problema além de buscar os dados na API, você terá de gerar a planilha e encaminhar para seu gestor (ou automatizar essa geração e envio). Mas, com Apps Script isso pode ser ainda mais simples.

Qual a mágica?

Primeiro, deixo abaixo um exemplo do que vamos produzir:



Basicamente, crie uma planilha (compartilhe com seu superir), entre no menu extensões > Apps Script. Fazendo isso você verá uma tela semelhante a uma IDE com um arquivo inicial chamado "Código.gs", bom, ai é javascript, só ser feliz.

Vou deixar abaixo outro exemplo, mas agora de um script que montei pra esse artigo onde diariamente vou preencher uma planilha com as últimas notícias:



Para "programar" a execução diária desse script, basta usar outro recurso do Apps Script, as triggers (acionadores). No menu lateral, clique em triggers, adicione uma nova, configure para executar baseado em tempo e escolha o horário que deve executar, com abaixo:


Ah, claro, não esqueça de apontar para a função principal (no nosso exemplo, a main).


Vou deixar o código abaixo (não vou colocar no github) caso queira copiar:

const main = () => {
const dailySheet = getDailySheet(`news-${getDateAsString()}`);
const news = getNews();
for(var i=0; i < news.totalResults; i++) {
writeIn(dailySheet, i+1, 1, news.articles[i].author).setFontWeight("bold");
writeIn(dailySheet, i+1, 2, news.articles[i].title);
writeIn(dailySheet, i+1, 3, news.articles[i].url);
}
}

const writeIn = (sheet, row,col,value) => {
return sheet.getRange(row,col).setValue(value);
}

const getDailySheet = (sheetName) => {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
}
sheet.setColumnWidth(1,200);
sheet.setColumnWidth(2,600);
sheet.setColumnWidth(3,100);

return sheet;
}

const getNews = () => {
const response = UrlFetchApp.fetch("https://newsapi.org/v2/top-headlines?"+
"country=br&category=business&apiKey="+
"<gera seu token xD>");
return JSON.parse(response.getContentText("UTF-8"));
}

const getDateAsString = () => {
const timeElapsed = Date.now();
const today = new Date(timeElapsed);
return `${today.getDay()}-${today.getMonth()+1}-${today.getFullYear()}`;
}