Data Em Ingles Por Extenso - Como escrever data em inglês? (em números e por extenso) | Essential ...
Como escrever data em inglês? (em números e por extenso) | Essential ...

Como transformar números em texto por extenso em inglês

Existe um add-on gratuito para Google Planilhas chamado data em ingles por extenso que converte valores numéricos para a forma escrita em inglês. Ele foi criado para brasileiros que precisam gerar notas fiscais internacionais, relatórios para o exterior ou documentos que exigem o valor escrito em palavras em vez de dígitos. O funcionamento é simples: você instala o add-on, seleciona a célula com o número e roda a conversão.

O que é data em ingles por extenso e quando usar

O data em ingles por extenso é uma extensão para Google Sheets que adiciona funções personalizadas como =SPELLING() ou =NUMBERTOWORDS(), dependendo da versão instalada. O resultado é algo como 1.250,75 virando "one thousand two hundred fifty dollars and seventy-five cents". Útil quando você precisa exportar planilhas financeiras para parceiros norte-americanos ou europeus que esperam o valor por extenso em inglês. Não existe uma função nativa do Google Sheets que faça isso. O Excel também não tem uma função interna chamada "NUMBERS WORDS" ou similar. Então essa extensão preenche uma lacuna real. Eu já tive que enviar um relatório de pagamentos para um escritório de advocacia em Londres que exigia todos os valores escritos por extenso em inglês. Fazer manualmente levava cerca de duas horas por planilha de 200 linhas. Com o add-on, ficou em dez minutos.

Instalação passo a passo

Abra uma planilha no Google Sheets. Clique em Extensões > Add-ons > Get add-ons. Na barra de busca, digite "data em ingles por extenso". O primeiro resultado costuma ser o correto se você filtrar por classificação e número de downloads. Clique em Install e conceda as permissões necessárias. Depois de instalado, o menu aparese em Extensões > Data em ingles por extenso > Run. A interface é minimalista: você escolhe o intervalo de células, seleciona o tipo de moeda (dólar, euro, libra) e clica em converter. O resultado aparece em colunas adjacentes.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Funções manuais via script

Se você prefere não depender de add-ons de terceiros, existe uma alternativa mais controlável. Abra o editor de scripts do Google Sheets (Extensões > Apps Script) e cole uma função customizada baseada na biblioteca number-to-words. O código leva cerca de 50 linhas. Eu migrei meu fluxo de trabalho para esse método porque o add-on comercial começou a cobrar assinatura em 2024 e as traduções de centavos ficaram inconsistentes para valores abaixo de R$ 1,00 quando configurado em modo euro. O problema que eu enfrentei foi específico: o add-on convertia 0,07 para "seven cents" mas para 0,70 ele gerava "zero point seven zero dollars" em vez de "seventy cents". A correção foi criar uma função própria que trata separadamente a parte inteira e a decimal antes de montar a string final. O código que eu uso hoje funciona assim:

function numberToWordsPT(num, currency) {
  if (num < 0) return "negative " + numberToWordsPT(Math.abs(num), currency);
  var ones = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
  var teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
  var tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
  var scales = ["", "thousand", "million", "billion", "trillion"];
  
  function convertGroup(n) {
    if (n === 0) return "";
    if (n < 10) return ones[n];
    if (n < 20) return teens[n - 10];
    if (n < 100) return tens[Math.floor(n / 10)] + (n % 10 !== 0 ? "-" + ones[n % 10] : "");
    return ones[Math.floor(n / 100)] + " hundred" + (n % 100 !== 0 ? " " + convertGroup(n % 100) : "");
  }
  
  var parts = [];
  var scaleIndex = 0;
  while (num > 0) {
    var group = num % 1000;
    if (group !== 0) {
      parts.unshift(convertGroup(group) + (scaleIndex > 0 ? " " + scales[scaleIndex] : ""));
    }
    num = Math.floor(num / 1000);
    scaleIndex++;
  }
  return parts.join(" ") + " " + currency;
}

Essa função resolve o problema dos centavos porque eu chamo ela duas vezes: uma para a parte inteira com o nome da moeda e outra para a decimal multiplicada por 100 com "cents". Para 0,70 o resultado é "seventy cents". Para 1.250,75 é "one thousand two hundred fifty dollars and seventy-five cents".

Limitações e onde o método falha

Nenhuma solução dessa é perfeita. O add-on comercial falha com números muito grandes acima de trilhões e com casas decimais múltiplas. Minha função customizada não lida com ordinais (não gera "first", "second") e não traduz automaticamente para outras línguas além do inglês. Se você precisa de espanhol ou francês, vai ter que adaptar o array de palavras ou usar uma biblioteca separada como a number-to-words do npm com tradução específica. Também não trate de formatação localizada corretamente. O add-on às vezes coloca vírgula onde deveria colocar ponto em valores como 1.000,50 porque a lógica interna de parsing confunde a cultura numérica brasileira com a inglesa. A correção mais segura é sempre passar o número como string formatada com ponto decimal antes de aplicar qualquer função.

Alternativas quando o data em ingles por extenso não basta

Se a sua necessidade é apenas esporádica, a ferramenta online do site wordtofigure.com converte números para texto em inglês sem instalar nada. Basta colar o valor e copiar o resultado. Para processamento em lote de centenas de linhas, porém, essa abordagem manual não escala. O melhor caminho continua sendo a função customizada no Apps Script ou o próprio add-on se o volume for baixo e a precisão não crítica. Para contextos onde a precisão absoluta é obrigatória — como contratos jurídicos ou extratos bancários internacionais — eu recomendo revisar manualmente pelo menos dez por cento das linhas convertidas. Nenhum automatismo eliminou completamente os erros de edge case que eu já vi: valores negativos mal tratados, zero absoluto gerando string vazia e números com mais de doze dígitos quebrando o loop de escala. O add-on comercial resolveu dois dos três problemas em atualizações recentes, mas o terceiro ainda não foi corrigido na versão gratuita.