SHEETS_GET_VALUES - Buscar Valores Específicos do Google Sheets
O que é este Node?
O SHEETS_GET_VALUES é o node responsável por buscar valores de múltiplos ranges em uma única requisição, otimizando performance quando precisa ler dados de áreas diferentes.
Por que este Node existe?
Buscar múltiplos ranges separadamente é ineficiente. O SHEETS_GET_VALUES existe para:
- Performance: Reduzir número de requisições à API
- Dados Dispersos: Buscar células não adjacentes em uma chamada
- Relatórios: Coletar métricas de diferentes partes da planilha
- Otimização: Usar quota da API de forma eficiente
Como funciona internamente?
Quando o SHEETS_GET_VALUES é executado, o sistema:
- Autentica: Valida tokens OAuth2
- Prepara ranges: Lista de múltiplos ranges a buscar
- Executa batchGet: Chama spreadsheets.values.batchGet()
- Retorna múltiplos resultados: Array com dados de cada range
- Se erro: Lança exceção
Código interno (baseado na API Google Sheets):
case 'get_values':
const getValuesResult = await sheets.spreadsheets.values.batchGet({
spreadsheetId: data.spreadsheetId,
ranges: data.ranges, // Array de strings: ['Sheet1!A1:B10', 'Sheet2!C5']
});
return {
success: true,
valueRanges: getValuesResult.data.valueRanges.map((vr: any) => ({
range: vr.range,
values: vr.values || [],
rowCount: vr.values?.length || 0,
})),
};
Quando você DEVE usar este Node?
Use SHEETS_GET_VALUES quando precisar ler múltiplas áreas diferentes:
Casos de uso
- Dashboard: "Buscar KPIs de células A1, B5, C10 em uma chamada"
- Relatório Consolidado: "Ler totais de múltiplas abas"
- Validação: "Verificar valores de células específicas dispersas"
- Comparação: "Buscar métricas de diferentes períodos"
Quando NÃO usar SHEETS_GET_VALUES
- Área contígua única: Use NODE SHEETS_READ (mais simples)
- Toda planilha: Use SHEETS_READ com range amplo
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "get_values" |
| spreadsheetId | string | Sim | ID da planilha |
| ranges | array | Sim | Array de ranges em notação A1 |
| accessToken | string | Sim | Token OAuth2 |
| refreshToken | string | Sim | Token OAuth2 refresh |
Exemplo 1: Buscar KPIs de Dashboard
Objetivo: Coletar métricas dispersas em uma única requisição
JSON para Importar
{
"name": "Buscar KPIs Múltiplos",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "sheets_1",
"type": "google_sheets",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Buscar Métricas",
"parameters": {
"operation": "get_values",
"spreadsheetId": "1Dashboard_XYZ",
"ranges": [
"Dashboard!B2",
"Dashboard!D2",
"Dashboard!F2",
"Vendas!A1:A10",
"Produtos!B5:C5"
],
"accessToken": "{{google_access_token}}",
"refreshToken": "{{google_refresh_token}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Métricas",
"parameters": {
"message": "📊 KPIs coletados:\n\nVendas Hoje: {{sheets_1.valueRanges.0.values.0.0}}\nClientes: {{sheets_1.valueRanges.1.values.0.0}}\nTaxa Conversão: {{sheets_1.valueRanges.2.values.0.0}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "sheets_1" },
{ "source": "sheets_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📊 KPIs coletados:
Vendas Hoje: 45
Clientes: 320
Taxa Conversão: 23%
Exemplo 2: Comparar Dados de Múltiplas Abas
Objetivo: Buscar totais de vendas de diferentes meses
JSON para Importar
{
"name": "Comparar Vendas Mensais",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "sheets_1",
"type": "google_sheets",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Buscar Totais",
"parameters": {
"operation": "get_values",
"spreadsheetId": "1Vendas_Ano_XYZ",
"ranges": [
"Janeiro!E100",
"Fevereiro!E100",
"Março!E100"
],
"accessToken": "{{google_access_token}}",
"refreshToken": "{{google_refresh_token}}"
}
}
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Calcular Média",
"parameters": {
"variableName": "media_trimestre",
"value": "{{(sheets_1.valueRanges.0.values.0.0 + sheets_1.valueRanges.1.values.0.0 + sheets_1.valueRanges.2.values.0.0) / 3}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "📈 Vendas Trimestre:\n\nJan: R$ {{sheets_1.valueRanges.0.values.0.0}}\nFev: R$ {{sheets_1.valueRanges.1.values.0.0}}\nMar: R$ {{sheets_1.valueRanges.2.values.0.0}}\n\nMédia: R$ {{media_trimestre}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "sheets_1" },
{ "source": "sheets_1", "target": "variable_1" },
{ "source": "variable_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📈 Vendas Trimestre:
Jan: R$ 150000
Fev: R$ 165000
Mar: R$ 180000
Média: R$ 165000
Resposta do Node
{
"success": true,
"valueRanges": [
{
"range": "Dashboard!B2",
"values": [["45"]],
"rowCount": 1
},
{
"range": "Dashboard!D2",
"values": [["320"]],
"rowCount": 1
},
{
"range": "Dashboard!F2",
"values": [["23%"]],
"rowCount": 1
}
]
}
Boas Práticas
✅ SIM:
- Agrupe buscas de múltiplas áreas em uma chamada
- Use notação A1 clara para cada range
- Limite a 100 ranges por requisição (limite da API)
- Acesse resultados por índice: valueRanges[0], valueRanges[1]
❌ NÃO: - Não use para área contígua única (use SHEETS_READ) - Não exceda limite de 100 ranges - Não confunda ordem dos resultados (segue ordem do array ranges)
Dicas
💡 Dica 1: GET_VALUES é perfeito para dashboards onde precisa buscar KPIs de diferentes células.
💡 Dica 2: Resultados mantêm mesma ordem do array ranges. valueRanges[0] corresponde a ranges[0].
💡 Dica 3: Para acessar valor específico: valueRanges[0].values[0][0] = primeira célula do primeiro range.
Próximo Node
→ SHEETS_READ - Ler área contígua única → SHEETS_BATCH_UPDATE - Múltiplas operações de escrita