Um script completo para dividir transações em parcelas na sua aba "CAIXA". Ele calcula as datas de vencimento e gera as novas linhas automaticamente, evitando trabalho manual e erros de digitação.
Baixe agora mesmo para ter acesso ao pacote completo e desbloquear o código-fonte da automação.
O código funciona baseado na posição das colunas (índices) da sua planilha. Isso significa que, se a posição de alguma coluna for alterada, será necessário ajustar os índices correspondentes no script para que ele continue funcionando corretamente.
Se uma nova coluna for adicionada no seu sistema (ex: entre as colunas P e Q), todas as colunas que estavam depois dela terão seus índices deslocados.
Isso afetará diretamente os índices do número de parcelas, do status "parcelado" (atualmente coluna Z) e das colunas que armazenam as datas das parcelas 2 a 5. Como resultado, o código não funcionará corretamente até que os índices sejam atualizados.
Antes de modificar a estrutura da planilha, verifique quais índices serão alterados para atualizar o código. Os índices são sempre indicados no código como data[i][n], onde "n" representa a posição da coluna (Lembrando que no JavaScript, a contagem inicia no 0. A coluna A é 0, a B é 1, etc).
data[i][10] // Esse número 10 representa a 11ª coluna no Google Sheets
Se uma nova coluna for adicionada antes dessa posição, esse número precisará ser ajustado para refletir a nova posição.
Confira um trecho da estrutura abaixo. Cadastre-se gratuitamente para desbloquear o código-fonte completo.
Após colar o código, vá em "Acionadores" (ícone de relógio), crie um novo e selecione a opção: Ao alterar (ou On Edit).
/**
* Função que adiciona parcelas automaticamente na aba "CAIXA"
*
* Esta função verifica as linhas da planilha para encontrar transações que ainda não foram parceladas.
* Dependendo do tipo de parcelamento, os valores das parcelas são calculados e inseridos automaticamente.
*/
function AdicionarParcelas() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CAIXA");
if (!sheet) return;
var lastRow = sheet.getLastRow();
if (lastRow < 2) return;
// Pega a matriz até a última coluna preenchida
var data = sheet.getRange(1, 1, lastRow, sheet.getLastColumn()).getValues();
var linhasAdicionadas = 0;
for (var i = 0; i < data.length; i++) {
var statusParcelamento = data[i][25];
var tipoPagamento = data[i][12];
if (statusParcelamento === "parcelado") continue;
var numParcelas = parseInt(data[i][19]);
var dataReferencia = new Date(data[i][1]);
// [ CÓDIGO OCULTO: Lógica de geração de dias e inserção de novas linhas ]
// Faça o download gratuito para acessar as mais de 50 linhas com o coração da automação.
var rowData = data[i];
var diasParcelas = [];
/* ...
Restante do código protegido.
...
*/
}
}
A lógica completa de cálculo e inserção de linhas foi ocultada nesta prévia. Cadastre-se para baixar o script completo e 100% funcional.
Quero o Código CompletoDesenvolvemos uma estrutura avançada e à prova de falhas. Abaixo você confere o raio-X de como o código gera suas parcelas de forma inteligente, validando as informações antes de gravar.
AdicionarParcelas()Esta é a função mestre que roda no Google Apps Script. O objetivo dela é varrer a sua planilha e agir silenciosamente em segundo plano, identificando novas transações de venda ou compra que precisam ser divididas em parcelas no seu fluxo de caixa.
O código se conecta ativamente à aba escolhida:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CAIXA");
Para evitar travamentos (tempo de execução), nós não lemos a planilha célula por célula. O código usa getRange().getValues() para extrair a matriz inteira de uma só vez para a memória.
A mágica começa aqui. A automação usa um comando for (var i = 0; i < data.length; i++) para olhar cada linha existente, da primeira até a última. É neste laço que ela decide se a linha merece ou não virar uma parcela.
Se o código apenas fizesse parcelas indefinidamente, ele duplicaria registros que já foram processados. Para isso existe o freio:
if (statusParcelamento === "parcelado") continue;
Se a linha atual já possuir a etiqueta "parcelado" gravada na coluna 25 (Status), o comando continue ordena que o código pule esta linha e passe para a próxima imediatamente.
A lógica se bifurca baseada no tipo de lançamento. Criamos duas inteligências:
Para impedir que a planilha quebre se algum dado for esquecido pelo usuário:
if (diasParcelas.length === 0) continue;
Garante que, se não houver dias válidos configurados (o vetor estiver vazio), o processo é abortado para aquela linha.
Antes de injetar as novas linhas, o script altera a linha-mãe.
sheet.getRange(i + 1, 26).setValue("parcelado");
sheet.getRange(i + 1, 25).setValue("Parcela 1 de " + numParcelas);
A compra/venda principal deixa de ser um lançamento genérico e passa a ser rotulada ativamente como "Parcela 1", ativando o nosso "Freio" (etapa 4) para a próxima vez que o código rodar.
Um segundo laço for começa a atuar para gerar exatamente as X parcelas solicitadas. É aqui que entra a clonagem inteligente da linha:
var novaLinha = rowData.slice();
A função slice() cria uma cópia idêntica da linha original, transportando todos os nomes, valores e identificadores, mas nos permitindo editar apenas os dados temporais.
Dentro do loop da nova linha, o código soma os dias definidos e recálcula o Vencimento em formato Brasileiro (dd/MM/yyyy).
novaLinha[11] = "";
novaLinha[14] = "";
Ele também anula campos de anexos ou observações da parcela-mãe que não devem se repetir nas filhas, mantendo o financeiro perfeitamente organizado.
Finalmente, o Google Sheets recebe o comando físico para inserir linhas reais e escrever os dados copiados:
sheet.insertRowAfter(i + 1 + linhasAdicionadas);
sheet.getRange(...).setValues([novaLinha]);
A variável linhasAdicionadas garante que as parcelas entrem na ordem exata e logo abaixo da transação que lhes deu origem.
Incrível a quantidade de lógica envolvida para economizar horas de trabalho manual, não é mesmo?
Baixar o Script Completo Agora