02 Dez 2024 | 6 minutos • Ferramentas
Como criar um documento no Coda - Fórmulas
Como solucionar alguns problemas dentro do documento
Ingrid Machado
Engenheira de computação, especialista em engenharia de software. Autora deste querido blog.
Depois de falar sobre os conceitos da criação de documento no Coda e de mostrar um exemplo, decidi explicar algumas das fórmulas que usei no documento que resultou nessa série de posts. Eu pretendia explicar sobre dentro do post anterior, mas ele estava muito grande e acho que ficaria complicado para o entendimento deixar tudo junto.
Selecionei as principais fórmulas do documento de aprendizado contínuo para explicar como elas funcionam, começando das mais simples. Também incluí, além do código da fórmula, a imagem que é mostrada dentro do Coda, para ficar mais claro.
Para entender melhor essa explicação, sugiro que você leia primeiro o guia do documento que estou usando como exemplo.
Datas
Cálculo de data de conclusão

If(thisRow.[Data de início].IsNotBlank(),thisRow.[Data de início]+thisRow.[Estimativa de conclusão (em dias)], "")
O documento solicita uma estimativa em dias para a data de conclusão do plano de estudos. Com essa data preenchida, e o plano de estudos iniciado, a fórmula calcula a data de conclusão através de uma função If(). Essa função é um SE e tem o seguinte formato:
If(condition, ifTrue, ifFalse)
- Condition: condição a ser avaliada
- ifTrue: o que deve ser executado caso a condição seja verdadeira
- ifFalse: o que deve ser executado caso a condição seja falsa
O que a fórmula avalia é se a data de início não está vazia, através da função IsNotBlank(). Se não estiver vazia, então a data de início é somada à data de conclusão. Senão, o campo é deixado em branco.
Se a data de ínicio é 26/11/2024 e a estimativa de conclusão é de 100 dias, o resultado será a data 06/03/2025, por exemplo.
Cálculo de dias restantes

thisRow.[Data de conclusão]-Today()
Para calcular quantos dias ainda restam para a conclusão do plano de estudos, o valor da data de conclusão, calculado através da fórmula anterior, é usado.
A conta é bem direta, o documento calcula a diferença entre a data de conclusão e o dia atual. A função Today() retorna o dia atual de forma dinâmica, o que significa que esse cálculo está sempre atualizado.
Se a data de conclusão é 06/03/2025 e a data atual é 15/12/2024, o resultado dos dias restantes será de 81 dias.
Botões
Os dois fluxos são botões que mudam de acordo com o status dos planos de estudo e dos itens. Dessa forma, é possível usar apenas um botão, mudando a função e o que é exibido de acordo com o status, através de uma fórmula.
Quando adicionamos um botão no Coda, podemos adicionar fórmulas nos campos “On click” e “Label” para tornar o comportamento e o texto do botão dinâmicos.
Fluxo de planos de estudos
On click:

SwitchIf(
thisRow.Status = [Não iniciado],
ModifyRows(thisRow, thisRow.Status, [Em andamento],
thisRow.[Data de início], Today()),
thisRow.Status = [Em andamento],
ModifyRows(thisRow, thisRow.Status, [Concluído]),
thisRow.Status = Suspenso,
ModifyRows(thisRow, thisRow.Status, [Não iniciado])
)
A função SwitchIf() executa o que estiver dentro da primeira condição verdadeira. E a função ModifyRows() permite que se altere valores de uma ou mais linhas em uma tabela.
Analisando a fórmula completa, temos o seguinte comportamento no clique do botão:
- Se o status é igual a “Não iniciado”, então a linha em que o botão foi clicado deve ter a coluna Status alterada para o valor “Em andamento” e a coluna “Data de início” alterada para a data de hoje através da função Today()
- Se o status é igual a “Em andamento”, então a linha em que o botão foi clicado deve ter a coluna Status alterada para o valor “Concluído”
- Se o status é igual a “Suspenso”, então a linha em que o botão foi clicado deve ter a coluna Status alterada para o valor “Não iniciado”
Label:

SwitchIf(
thisRow.Status=[Não iniciado],"Iniciar plano",
thisRow.Status=[Em andamento], "Concluir plano",
thisRow.Status=Suspenso, "Retomar plano"
)
O que está sendo exibido no botão também muda de acordo com o status e acredito que essas transições farão mais sentido nessa explicação.
O texto do botão deve ser exibido conforme as seguintes regras:
- Se o status é igual a “Não iniciado“, exibir “Iniciar plano”
- Se o status é igual a “Em andamento“, exibir “Concluir plano”
- Se o status é igual a “Suspenso“, exibir “Retomar plano”
Se analisarmos as duas regras (On click e Label) juntas, é mais fácil entender: se o status é igual a “Não iniciado“, exibir “Iniciar plano” e, ao clicar, então a linha em que o botão foi clicado deve ter a coluna “Status” alterada para o valor “Em andamento” e a coluna “Data de início” alterada para a data de hoje através da função Today().
Fluxo de itens
On click:


SwitchIf(
thisRow.Status = [Não iniciado],
RunActions(
ModifyRows(thisRow, thisRow.Status, [Em andamento]),
ModifyRows(
Filter(
[Plano de estudos],
And(
Status = [Não iniciado],
Itens.Contains(thisRow)
)
),
[Plano de estudos].Status,
[Em andamento],
[Plano de estudos].[Data de início],
Today()
)
),
thisRow.Status = [Em andamento],
RunActions(
ModifyRows(thisRow, thisRow.Status, [Concluído]),
ModifyRows(
Filter(
[Plano de estudos],
And(
Status = [Em andamento],
Itens.Contains(thisRow),
Itens
.All(
Or(
CurrentValue.Status = [Concluído],
CurrentValue.Status = Suspenso
)
)
)
),
[Plano de estudos].Status,
[Concluído]
)
),
thisRow.Status = Suspenso,
ModifyRows(thisRow, thisRow.Status, [Não iniciado])
)
Para os itens, a fórmula dentro do “On click” é bem parecida, mas se torna mais complexa por duas regras adicionais:
- Quando um item dentro de um plano de estudos não iniciado é iniciado, então o plano de estudos também é iniciado
- Quando o último item pendente de um plano de estudos é concluído, então o plano de estudos também é concluído
Para conseguir executar essas regras, usei as seguintes funções:
- RunActions(): usada para executar mais de uma ação
- Filter(): retorna valores que atendem a um filtro
- Contains(): verifica se uma lista contém determinado valor
- And(): verifica se todas as entradas são verdadeiras para retornar verdadeiro
- Or(): verifica se alguma entrada é verdadeira para retornar verdadeiro
- All(): verifica se uma expressão é verdadeira em todos os itens de uma lista
Quando o status do item é “Não iniciado” e o botão é clicado, a fórmula vai passar o item para o status “Em andamento” e avaliar se o plano de estudos que contém esse item também está no status “Não iniciado”. Um filtro é feito para essa segunda conferência e o plano de estudos que atende esse critério vai ter o status passado para “Em andamento” e a data de início vai ser preenchida com a data atual.
Quando o status do item é “Em andamento” e o botão é clicado, a fórmula vai passar o item para o status “Concluído” e avaliar se o plano de estudos que contém esse item possui todos os outros itens no status “Concluído” ou “Suspenso”. Se essa condição for verdadeira, o plano de estudos também terá o seu status alterado para “Concluído”.
A fórmula em “Label” é igual à usada no plano de estudos, com a diferença de que os textos se referem a um item e não a um plano.
Espero que ter explicado essas fórmulas te ajude a criar as suas próprias fórmulas no Coda. Caso queira ler mais a respeito, tem esse post no blog explicando sobre as fórmulas do Coda e esse link é o guia oficial com todas as fórmulas.
Até a próxima!
O link do post foi copiado com sucesso!Mais conteúdos de Ingrid Machado
24 Nov 2025 • Ferramentas
Obsidian Web Clipper
No Clube do Livro para Introvertidos, estamos lendo o livro “Criando um segundo cérebro”. E uma das sugestões do autor é salvar trechos importantes de páginas que estamos lendo online. Eu gostei d...
2 minutos
23 Jun 2025 • Ferramentas
Transferindo documentos do Coda para o Obsidian - Parte 1
Estou numa fase de hiper foco na costura, mas decidi diversificar um pouco os meus interesses do momento depois de ler um changelog do Obsidian. Recentemente, foi lançada uma funcionalidade chamad...
8 minutos
12 Mai 2025 • Ferramentas
Threadloop
Em qualquer projeto que inicio, eu gosto de ter alguma forma de organizar o que vou fazer. Na costura não está sendo diferente. Eu já estou participando de algumas comunidades, mas decidi procurar...
3 minutos