Se o scraping com Excel / VBA é a via «desktop», em que um script traz os dados direto para a pasta de trabalho, o Google Sheets oferece algo que o Excel não traz de fábrica: fórmulas de importação integradas. Em muitos casos não é preciso escrever uma linha de código sequer: basta inserir uma função em uma célula para que a planilha carregue sozinha os dados do site e os mantenha atualizados.
E quando as fórmulas não dão conta, entra em cena o Google Apps Script, o análogo em nuvem do VBA, escrito em JavaScript. Ele sabe fazer requisições HTTP, parsear JSON e rodar em horários programados — e tudo isso executa nos servidores do Google, não na sua máquina.
Neste artigo percorremos os dois níveis: primeiro as fórmulas, para uma extração rápida sem código; depois o Apps Script, para as tarefas complexas.
Em que o Google Sheets difere do Excel / VBA
A comparação ajuda a escolher a ferramenta conforme a tarefa:
| Critério | Excel / VBA | Google Sheets |
|---|---|---|
| Extrair dados com uma fórmula, sem código | Só com Power Query | IMPORTXML, IMPORTHTML etc. |
| Linguagem de scripts | VBA | Apps Script (JavaScript) |
| Onde executa | No seu PC | Na nuvem do Google |
| Execução programada | Agendador de Tarefas do Windows + macro | Acionadores nativos |
| Trabalho colaborativo | Compartilhando o arquivo | Em tempo real, por um link |
| Dados financeiros prontos | Não | GOOGLEFINANCE integrada |
| Limites de requisições | Praticamente nenhum | Cotas do Google |
A conclusão principal: para uma extração leve ou média, o Google Sheets costuma ser mais rápido, porque metade das tarefas se resolve com uma única fórmula. Nos cenários pesados e fora do padrão, a lógica é a mesma do VBA; o que muda é apenas a sintaxe.
Nível 1. Extração com fórmulas
IMPORTHTML — tabelas e listas
A função mais simples. Extrai uma tabela ou uma lista inteira pelo seu número:
=IMPORTHTML("https://example.com/page"; "table"; 1)Argumentos: a URL, o tipo de elemento ("table" ou "list") e o número de ordem dele na página. Se a página contém várias tabelas, vá testando o índice (1, 2, 3...) até achar a que procura. O resultado se «derrama» automaticamente pelas células vizinhas.
IMPORTXML — extração precisa com XPath
A mais poderosa das ferramentas de fórmula. Recebe uma URL e uma consulta XPath, a expressão que aponta para um elemento específico da marcação:
=IMPORTXML("https://example.com"; "//h1")
=IMPORTXML("https://example.com"; "//div[@class='price']")
=IMPORTXML("https://example.com"; "//span[@id='total']/text()")Alguns modelos de XPath úteis:
| Tarefa | XPath |
|---|---|
| Todos os títulos h2 | //h2 |
| Elemento pela classe | //div[@class='value'] |
| Elemento pelo id | //*[@id='price'] |
| Um atributo (por exemplo, um link) | //a/@href |
| O texto dentro de uma tag | //span[@class='cur']/text() |
| O enésimo elemento de uma lista | (//li)[3] |
O jeito mais fácil de obter o XPath é olhar no navegador: abra as ferramentas de desenvolvedor (F12), localize o elemento e clique com o botão direito → Copy → Copy XPath.
IMPORTDATA — CSV e TSV
Se a fonte oferece um arquivo CSV ou TSV já pronto, trazemos direto:
=IMPORTDATA("https://example.com/data.csv")A função distribui os valores pelas colunas por conta própria. Ideal para datasets abertos e exportações.
IMPORTFEED — RSS e Atom
Para feeds de notícias e blogs:
=IMPORTFEED("https://example.com/rss")GOOGLEFINANCE — finanças sem scraping nenhum
Merece menção à parte a GOOGLEFINANCE, a fonte integrada de dados de bolsa e de câmbio. É o caso em que não é preciso scrapear nada: o Google já coletou tudo por você.
=GOOGLEFINANCE("NASDAQ:AAPL"; "price")
=GOOGLEFINANCE("CURRENCY:USDBRL")
=GOOGLEFINANCE("NASDAQ:GOOGL"; "price"; DATE(2024;1;1); DATE(2024;12;31); "DAILY")O primeiro exemplo é o preço atual de uma ação; o segundo, a cotação de um par de moedas; o terceiro, as cotações históricas de um período. Se a sua tarefa cabe no que a GOOGLEFINANCE cobre, esse é o caminho mais confiável: sem bloqueios nem layout quebrado. O scraping de sites de terceiros só é necessário onde esses dados não existem ou quando é preciso uma fonte fora do padrão.
Nível 2. Google Apps Script
As fórmulas são ótimas, mas têm teto: não sabem se autenticar, contornar proteções complexas, processar o JSON aninhado de uma API nem executar lógica com ramificações. É aí que começa o Apps Script.
Abra a planilha → Extensões → Apps Script, e você entra no editor de código na nuvem. É o equivalente direto do editor de VBA do material sobre Excel, só que em JavaScript.
Requisição HTTP: UrlFetchApp
A requisição básica a uma página ou a uma API:
function getResponse(url) {
const options = {
method: 'get',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
},
muteHttpExceptions: true // não falhar com os códigos 4xx/5xx
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
}
return 'ERROR: ' + response.getResponseCode();
}Compare com a função GetResponse do artigo sobre VBA: a lógica é idêntica — abrir a requisição, definir o User-Agent, verificar o código de resposta. Só muda o invólucro: no lugar de MSXML2.XMLHTTP, aqui está o UrlFetchApp.
Parsing de JSON: nativo
A grande vantagem do Apps Script sobre o VBA: o JSON é parseado com uma única instrução integrada, sem funções caseiras nem módulos de terceiros.
function getPrice(symbol) {
const url = 'https://example-api.com/quote?symbol=' + symbol;
const json = getResponse(url);
const data = JSON.parse(json); // uma linha no lugar de ExtractJsonValue
return data.price;
}No VBA, para o mesmo resultado, era preciso analisar a string na mão ou plugar o VBA-JSON. Aqui basta o JSON.parse, e você já trabalha direto com o objeto.
Gravar o resultado na planilha
Gravamos os dados nas células por meio do objeto da planilha:
function writeQuotes() {
const tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA'];
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Cabeçalhos
sheet.getRange(1, 1, 1, 3).setValues([['Ticker', 'Preço', 'Hora']]);
const rows = [];
const now = new Date();
tickers.forEach(function (ticker) {
const price = getPrice(ticker);
rows.push([ticker, price, now]);
Utilities.sleep(1000); // pausa de 1 s entre as requisições
});
// Despejamos tudo em uma única chamada: é mais rápido
sheet.getRange(2, 1, rows.length, 3).setValues(rows);
}O princípio de «acumular em um array e despejar em uma única chamada» é tão importante para a velocidade aqui quanto no VBA: o setValues sobre o intervalo inteiro roda várias vezes mais rápido do que gravar célula a célula dentro de um laço.
Parsing de HTML no Apps Script
Com a análise de HTML nativa a coisa complica: o Apps Script não tem um parser do DOM completo como o HTMLDocument do VBA. Na prática, usam-se expressões regulares ou a extração de texto entre marcadores:
function extractByRegex(text, pattern) {
const re = new RegExp(pattern);
const match = text.match(re);
return match ? match[1] : '';
}
// Exemplo: tirar o preço de "<span class='price'>152.34</span>"
// const price = extractByRegex(html, "class='price'>([\\d.]+)<");Para marcações complexas, às vezes se recorre a bibliotecas de terceiros (por exemplo, o Cheerio por meio de um serviço intermediário), mas na maioria das tarefas bastam as expressões regulares ou a fórmula XPath IMPORTXML.
Uma função personalizada para a célula
O Apps Script permite criar uma fórmula própria, chamável direto da planilha como se fosse nativa:
/**
* Retorna o preço de um ticker.
* @customfunction
*/
function MYPRICE(symbol) {
return getPrice(symbol);
}Depois de salvar, a célula passa a aceitar =MYPRICE("AAPL"). O VBA tem um recurso parecido com as UDF, mas aqui a função fica disponível de imediato para todos que têm acesso à planilha.
Atualização automática programada
No VBA, execuções periódicas exigem o agendador de tarefas externo do Windows. No Google Sheets, o agendamento vem integrado: são os acionadores (triggers).
No editor do Apps Script: ícone do relógio (Acionadores) → Adicionar acionador → escolha a função, o evento «baseado em tempo» e o intervalo (a cada hora, a cada dia etc.).
Ou via código:
function setupTrigger() {
ScriptApp.newTrigger('writeQuotes')
.timeBased()
.everyHours(1)
.create();
}O script rodará nos servidores do Google mesmo com a sua máquina desligada e a planilha fechada. Para um scraper em VBA, isso é inalcançável sem um computador ligado o tempo todo.
Limites e armadilhas ocultas
A abordagem em nuvem tem seu preço: as cotas do Google.
- As fórmulas
IMPORT...se atualizam periodicamente (aproximadamente uma vez por hora) e são cacheadas. Não servem para dados atualizados ao segundo. - O
UrlFetchApptem um limite diário de chamadas (depende do tipo de conta; em geral, milhares de requisições por dia na gratuita). - O tempo de execução do script é limitado (na casa de 6 minutos por execução nas contas gratuitas). Uma extração longa terá de ser fatiada.
#N/AeLoading...nas fórmulas costumam significar que a fonte não retornou dados, o layout mudou ou a requisição vinda dos servidores do Google foi bloqueada.
Essas restrições são o principal motivo pelo qual o scraping pesado e frequente às vezes volta para o trilho «desktop» do material sobre Excel / VBA, onde, na prática, não há limites de requisições.
O que escolher: Sheets ou Excel / VBA
Um resumo rápido:
- Rápido e sem código, dados na planilha, trabalho em equipe → Google Sheets e fórmulas.
- Taxas de câmbio e cotações de bolsa → primeiro a
GOOGLEFINANCE; só se ela não der conta, scraping. - Atualização automática sem PC ligado → Google Sheets com acionadores.
- Grande volume, requisições frequentes, sem limites, parsing de HTML complexo → Excel / VBA.
- Ambiente corporativo sem nuvem, dados locais → Excel / VBA.
Conclusão
O Google Sheets cobre dois níveis de extração de dados com uma única ferramenta. As fórmulas IMPORTHTML, IMPORTXML, IMPORTDATA e GOOGLEFINANCE resolvem as tarefas típicas sem uma linha de código, e o Apps Script, com o UrlFetchApp e o JSON.parse nativo, assume tudo o que é complexo — e faz isso na nuvem, em horários programados e sem depender da sua máquina.
Na comparação com a abordagem do material sobre Excel / VBA, a lógica continua a mesma — requisição, parsing, gravação, tratamento de erros —, mas a sintaxe é mais simples, o JSON é parseado «de fábrica» e a automação não exige um agendador externo. O preço da comodidade são as cotas do Google: quando esbarrar nelas, faz sentido voltar à solução desktop em VBA. As duas ferramentas não competem entre si — elas se complementam: escolha conforme a tarefa concreta.