--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/35864aef-ae13-4eb2-9554-0609e9ac2a94n%40googlegroups.com.
Olá!
Este é um problema muito comum e frustrante, mas a boa notícia é que tem uma solução clara. A sua análise está correta: o problema não é o seu computador, mas sim como o Planilhas Google lida com certos tipos de fórmulas, especialmente após uma "reinicialização a frio" como reiniciar o computador.
O problema está em um conceito chamado "funções voláteis". São fórmulas cujo resultado pode mudar sem que você edite diretamente a célula. As principais culpadas são:
Funções de Importação: Qualquer função que busca dados externos, como IMPORTXML, IMPORTRANGE, IMPORTHTML, etc.
Funções Personalizadas do Apps Script: Esta é a causa mais provável no seu caso. Se você criou uma função no Apps Script (ex: function PEGAR_DADO_API(url)) e a está usando como uma fórmula em centenas de células, você está criando um problema de desempenho massivo.
Como funciona o cache:
Ao fechar e reabrir o navegador: O Google mantém os resultados das suas fórmulas em um "cache" temporário. Quando você reabre a planilha, ele simplesmente mostra os resultados salvos, o que é muito rápido.
Ao reiniciar o computador: Essa conexão e o cache são completamente perdidos. Quando você abre a planilha, o Google é forçado a recalcular todas as suas funções voláteis do zero. Se você tem centenas de células chamando uma função do Apps Script, o Google tenta executar centenas de scripts ao mesmo tempo, o que atinge rapidamente as cotas e limites da plataforma, resultando na lentidão extrema (10-15 minutos) que você está vivenciando.
A solução é parar de fazer com que cada célula individualmente "puxe" (pull) os dados através de uma fórmula. Em vez disso, vamos criar um único script centralizado que "empurra" (push) todos os dados para a sua planilha de uma só vez, em intervalos programados.
Os dados se tornarão valores estáticos na sua planilha (texto e números normais), o que fará com que ela carregue instantaneamente. O script será responsável por atualizar esses valores periodicamente.
A primeira coisa a fazer é remover a função personalizada que está causando a lentidão das suas células.
Exemplo: Se suas células têm a fórmula =MINHA_FUNCAO(A1), você precisará apagar essa fórmula.
Vamos criar uma única função no seu editor de scripts que fará o trabalho de todas as fórmulas de uma vez.
Exemplo de Estrutura:
Imagine que sua função personalizada original se chamava MINHA_FUNCAO(parametro). O novo script se parecerá com isto:
/**
* Esta é a função principal que busca TODOS os dados e os insere na planilha.
* Ela substitui o uso de fórmulas personalizadas em cada célula.
*/
function atualizarTodosOsDados() {
const folha = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SuaAba"); // Mude "SuaAba" para o nome da sua planilha
// Exemplo: Pega todos os parâmetros da coluna A, a partir da linha 2
const intervaloDeParametros = folha.getRange("A2:A" + folha.getLastRow());
const parametros = intervaloDeParametros.getValues();
const resultados = []; // Array para armazenar todos os resultados
// Loop através de cada parâmetro para buscar os dados
for (let i = 0; i < parametros.length; i++) {
let parametroAtual = parametros[i][0];
// Se a célula do parâmetro estiver vazia, pula para a próxima
if (parametroAtual === "") {
resultados.push([""]); // Adiciona uma célula vazia ao resultado
continue;
}
// --- COLOQUE A LÓGICA DA SUA FUNÇÃO ORIGINAL AQUI ---
// Exemplo:
// var url = "https://api.exemplo.com/dados?id=" + parametroAtual;
// var resposta = UrlFetchApp.fetch(url);
// var dado = JSON.parse(resposta.getContentText()).valor;
//
// Para este exemplo, vamos usar um valor simulado:
var dado = "Resultado para " + parametroAtual;
// ---------------------------------------------------
// Adiciona o resultado ao array. É importante que seja um array dentro de um array.
resultados.push([dado]);
}
// Escreve TODOS os resultados de volta na planilha de uma só vez (muito eficiente)
// Exemplo: Escreve os resultados na coluna B, a partir da linha 2
folha.getRange("B2:B" + (resultados.length + 1)).setValues(resultados);
}
Agora, faremos com que este script rode automaticamente, sem que você precise fazer nada.
No editor do Apps Script, clique no ícone de relógio ("Acionadores") no menu à esquerda.
Clique no botão "+ Adicionar acionador" no canto inferior direito.
Configure o gatilho:
Função a ser executada: atualizarTodosOsDados
Escolha qual implantação deve ser executada: Principal
Selecione a origem do evento: Baseado em tempo
Selecione o tipo de acionador baseado em tempo: Temporizador de horas (ou de minutos, ou diário, dependendo da sua necessidade).
Selecione o intervalo de horas: A cada hora (ou o intervalo que preferir).
Clique em Salvar.
Carregamento Instantâneo: Sua planilha conterá apenas texto e números, não centenas de fórmulas que precisam ser recalculadas. Ela abrirá tão rápido quanto qualquer planilha normal.
Dados Estáveis: Os dados não desaparecerão ou mostrarão "Carregando...". Eles estarão sempre lá.
Atualizações Controladas: Os dados serão atualizados em segundo plano, automaticamente, no intervalo que você definiu, mesmo que a planilha esteja fechada.
Evita Cotas: Em vez de centenas de pequenas execuções de script, você terá uma única execução maior e mais eficiente, que não sobrecarrega o sistema.
Esta é a maneira correta e profissional de lidar com a busca de dados em massa no Planilhas Google e resolverá seu problema de lentidão permanentemente.
--
--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/1c4131ef-382f-44c6-bbee-f8cf91003875n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/dd5cdeb9-1190-4b2c-a9f5-d4b104ad93e7n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/b2ff3236-2506-4853-81bb-291d565a85b1n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/2fa848fd-c12c-49d8-afe8-6a5e13452920n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/324bf57e-898a-4154-b226-886daa6a3178n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/8ea254cc-c8cc-45f2-93ca-636207d36fa7n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/9a6288ae-9d8e-4163-ba41-6f3d6de7851en%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/be8174e4-f2d1-4cd0-a11d-e78c951e576en%40googlegroups.com.
Hi Keith,
Yes! We can put the formula to calculate the total at the top. That's a great idea. I see there are many rows of data below that are unused and showing a value of 0. Can we remove them? Just want to process calculations in the data area (Start row: 12; Finish row: 512; Start col: 3; Finish col: 14 that mean C12:N511).
Thank you so much!David
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/b640a492-a6b8-4e19-8bfc-b73cb338adf7n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/9c84bfcd-e34c-4ddc-87dd-0ec1d0190160n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/38ca1cc9-9293-41f9-b0a8-14a357f90f96n%40googlegroups.com.