Pack de UDF GRÁTIS para Power Apps

O que são UDF’s?

As UDFs (User-Defined Functions) no Power Apps são funções personalizadas que os usuários podem criar para reutilizar lógica em diferentes partes do aplicativo.

Saiba como criar e utilizar:

Porque usar UDF’s?

  • Reutilização de Código – Evita duplicação de lógica ao centralizar cálculos e regras em um único local.
  • Facilidade de Manutenção – Alterações na lógica podem ser feitas em um único lugar, reduzindo o risco de erros e inconsistências.
  • Melhoria na Performance – Reduz a repetição de cálculos desnecessários ao armazenar valores já processados em variáveis ou coleções.
  • Organização e Legibilidade – Torna o aplicativo mais estruturado, padronizado e fácil de entender, especialmente em projetos grandes.

Sobre o Pack

Fiz este pack com muito carinho e estou disponibilizando gratuitamente afim de colaborar com toda a comunidade Power Apps. Aprendi muito com conteúdos gratuitos por aí e nada mais justo do que retribuir esse favor. Com este pack vc será capaz de padronizar o seu App e elevar o seu nível de desenvolvimento. Sejam livres para usar e não repetir mais fórmulas!


Copie a UDF e cole na propriedade FORMULAS do seu APP. Para usá-la basta chamar o nome da UDF na expressão em qualquer parte do seu aplicativo.

📝 UDFs para Tratamento de Texto

Remover Espaços

fnRemoverEspacos(Texto:Text):Text=Substitute(Texto;Char(32);"");;

Remover Espaços Duplos

fnRemoverEspacosDuplos(Text:Text):Text=
Concat(
    Filter(IfError(Split(Texto;Char(32));Blank());
    !IsBlank(Value));Value;Char(32)
);;

Remover Acentos

fnRemoverAcentos(Texto:Text):Text=
With(
    {
        _Text:Texto;
         _De: "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ";
        _Para: "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"
    };
    Concat(
        ForAll(
            Split(_Text;"");
            If( Value in _De ; Mid(_Para;Find(Value;_De);1) ; Value )
        );Value
    )
);;

Remover Caracteres Especiais

fnRemoverEspeciais(Texto:Text):Text=
Concat(
    ForAll(
        Split(Texto;"");
        If( IsMatch(Value;"[^\w\s]") ; ""; Value )
    );Value
);;

Repetir Texto

fnRepetirTexto(Texto:Text;Separador:Text;Repeticoes:Number):Text=Concat(ForAll(Sequence(Repeticoes);Texto);Value;Separador);;

Capturar Dígitos

fnCapturarDigitos(Texto:Text):Text=Concat(MatchAll(Texto;Match.Digit);FullMatch);;

Capturar Extensão de Arquivo

fnCapturarExtensao(NomeComExtensao:Text):Text=Last(Split(NomeComExtensao ; "." )).Value;;

📅 UDFs para Formatação de Data e Hora

Formato de Data

fnFormatoData(DataHora:DateTime):Text=Text(DataHora;"dd/mm/yyyy");;

Formato de Hora

fnFormatoHora(DataHora:DateTime):Text=Text(DataHora;"hh:mm");;

Formato de Data e Hora

fnFormatoDataHora(DataHora:DateTime):Text=Text(DataHora;"dd/mm/yyyy hh:mm");;

Segundos em Hora

fnFormatoSegundosHora(TotalSegundos:Number):Text=${Text(RoundDown(TotalSegundos/3600;0);"00")}:{Text(Mod(RoundDown(TotalSegundos/60;0);60);"00")}";;

Minutos em Hora

fnFormatoMinutosHora(TotalMinutos:Number):Text=${Text(RoundDown(TotalMinutos/60;0);"00")}:{Text(Mod(TotalMinutos;60);"00")}";;

🔢 UDFs para Formatação Numérica

Moeda

fnFormatoMoeda(Valor:Number):Text=Text(Valor;"$ #,0.00";"pt-BR");;

Quantidade

fnFormatoQtde(Valor:Number):Text=Text(Valor;"#,0.00";"pt-BR");;

Percentual

fnFormatoPecentual(Valor:Number):Text=Text(Valor;"0.00%");;

Indicador Percentual

fnIndicadorPercentual(Valor:Number;MostrarZerado:Boolean):Text=With(
    {
        _Indicador:Switch(true;Valor>0;"▲";Valor<0;"▼";"▪");
        _Cor:Switch(true;Valor>0;"#40A73F";Valor<0;"#F1416C";"#000")
    };
    If(!MostrarZerado && Valor=0;"";$"{_Indicador}{Text(Abs(Valor);"0.00%")}")
);;

✅ UDFs para Validação

Tem Espaço ou Caracter Especial

fnTemEspacoOuEspecial(Text:Text):Boolean=!IsEmpty(MatchAll(Text;"[^\w\s]")) || !IsBlank(Find(Char(32);Text));;

📊 UDFs para Operações de Cálculo

Dividir Valores

fnDivide(numerador:Number;denominador:Number):Number=IfError(numerador/denominador;0);;

Percentual da Referência

fnPercentual(Valor:Number;Ref:Number):Number= IfError( ((Valor - Ref) / Ref) * 100 ; 0 );;

Dias Úteis

fnDiasUteis(DataInicio:DateTime; DataFim:DateTime):Number=
IfError(
    CountIf(
        ForAll(
            Sequence(DataFim-DataInicio+1);
            DataInicio+Value-1
        );
        Weekday(Value) in [2; 3; 4; 5; 6]
    );0
);;

Dias Úteis – Feriados

nfFeriados=[
    {Data:DateValue("11/03/2025";"pt-BR");NomeFeriado:"Nome Feriado"};
    {Data:DateValue("12/03/2025";"pt-BR");NomeFeriado:"Nome Feriado"}
];;

fnDiasUteisFeriado(DataInicio:DateTime; DataFim:DateTime):Number=
IfError(
    CountIf(
        ForAll(
            Sequence(DataFim-DataInicio+1);
            DataInicio+Value-1
        );
        Weekday(Value) in [2; 3; 4; 5; 6] && Not(Value in nfFeriados.Data)
    );0
);;

Data Fim Útil

fnDataFimUtil(DataInicio: DateTime; QtdeDias: Number): DateTime =
IfError(
    With({DataFim:DateAdd(DataInicio;QtdeDias*2;TimeUnit.Days)};
        Last(
            FirstN(
                Filter(
                    ForAll(Sequence(DataFim-DataInicio+1);DataInicio+Value-1);
                    Weekday(Value) in [2; 3; 4; 5; 6]
                );
                QtdeDias
            )
        ).Value
    );
    Blank()
);;

Data Fim Útil – Feriados

nfFeriados=[
    {Data:DateValue("11/03/2025";"pt-BR");NomeFeriado:"Nome Feriado"};
    {Data:DateValue("12/03/2025";"pt-BR");NomeFeriado:"Nome Feriado"}
];;

fnDataFimUtilFeriado(DataInicio: DateTime; QtdeDias: Number): DateTime =
IfError(
    With({DataFim:DateAdd(DataInicio;QtdeDias*2;TimeUnit.Days)};
        Last(
            FirstN(
                Filter(
                    ForAll(Sequence(DataFim-DataInicio+1);DataInicio+Value-1);
                    Weekday(Value) in [2; 3; 4; 5; 6] && Not(Value in nfFeriados.Data)
                );
                QtdeDias
            )
        ).Value
    );
    Blank()
);;

💻 UDFs para Encode SVG

Encode SVG

fnEncodeSVG(SVG_Code:Text):Text="data:image/svg+xml;utf8, " & EncodeUrl(SVG_Code);;

Corrigir Cor SVG

fnCorrigirCorSVG(CorHexadecimal:Text;CodigoSVG:Text):Text=
With(
    {
        Color:Coalesce(CorHexadecimal;"#000");
        SVG_Code:CodigoSVG
    };
    With({varLenth: Len(SVG_Code);varPosticao:Find(">";SVG_Code)};
        With({varInputFill: If(CountRows(MatchAll(SVG_Code;"fill="))>0;SVG_Code; IfError(Left(SVG_Code;varPosticao-1);"") & " fill='" & Color & "'" & Right(SVG_Code;varLenth-varPosticao+1))};
            With({varFixColor: Switch(true;"#000" in varInputFill;Substitute(varInputFill;"#000";Color);"currentColor" in varInputFill;Substitute(varInputFill;"currentColor";Color);varInputFill)};
                "data:image/svg+xml;utf8, " & EncodeUrl(varFixColor)
            )
        )
    )
);;

🎭 Bônus – UDF Máscara de Celular, CPF, CNPJ e CEP

Esta UDF é muito poderosa, você consegue customizar para qualquer máscara numérica.

nfMascaras=
ForAll(
    [
        {Formato:"CPF";Mascara:"##.###.###-##"};
        {Formato:"CEP";Mascara:"##.###-###"};
        {Formato:"CNPJ";Mascara:"##.###.###/####-##"};
        {Formato:"CELULAR";Mascara:"(##) #####-####"}
    ];
    Patch(ThisRecord;{MaxLenth:Len(Mascara)})
);;

fnMascara(entrada:Text;formato:Text):Text=
With(
    {
        _InputText:entrada;
        _Mask:LookUp(nfMascaras As Mask;Mask.Formato=formato;Mask.Mascara)
    };
    With(
        {
            _TableMask:Split(_Mask;"");
            _TableNumbers:MatchAll(_InputText;Match.Digit)
        };
        Concat(
            ForAll(
                Sequence(CountRows(_TableMask));
                With({_Caracter:Index(_TableMask;Value).Value};
                    If(
                        _Caracter="#";
                        IfError(Index(_TableNumbers;CountRows(MatchAll(Left(_Mask;Value);"#"))).FullMatch;"0");
                        _Caracter
                    )
                )
            );
            Value
        )
    )
);;

Eu ensino a utilizar essa UDF no vídeo abaixo:


Foto de Iago Melo

Iago Melo

Especialista em Power Apps, Power Automate e SharePoint | Power BI e Análise de Dados

Compartilhe nas mídias:

Uma resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Categorias

Precisa de uma consultoria?

A PowerOtimiza pode te ajudar

Quer um aplicativo para o seu negócio?

A PowerOtimiza pode te ajudar

Os mais lidos:

Este site usa cokiers para garantir que você tenha a melhor experiência.