domingo, 12 de setembro de 2010

Edição de campos do Microsoft Word

Dia desses precisei montar um recibo de pagamento para um amigo que tem um escritório.
Ele tinha uma planilha de controle de pagamentos e descontos lançados e fazia os recibos a mão, apenas utilizando-se de um modelo pré-formatado e com frase e formatação de texto pronta.

Dava uns Ctrl+C e Ctrl+V, digitava o valor por extenso e.. tudo tudo pronto! Mais um recibo ok!
Porém, isso vai bem enquanto vc tem poucos recibos a gerar.. até uns 10 mais ou menos... mas tente fazer isso para uns 50, para ver quanto tempo você leva.


Já havia automatizado algo com um pouco menos campos ... mais simples ... mas também não lembrava. Então ... fui eu pesquisar e trago aqui pra vcs porque foi bem difícil achar... devo ter gasto umas 4 horas pra ficar redondo a config. Inclusive na documentação oficial do Microsoft Office que, além de difícil de achar o assunto, tem erros de sintaxe.

Lá vai:

O Microsfot Word tem várias opções de formatação de campos. Usamos campos principalmente quando geramos malas diretas e outros documentos gerados automaticamente com base em uma tabela do Excel ou Arquivo do Access.

O tipo do campo nesses casos é "campo de mesclagem" ( MERGEFIELD) e suporta várias opções de formatação.

As formatações básicas são 4 : maiúsculas, minúsculas, primeira maiúscula ou todas as primeiras letras maiúsculas. Além disso a formatação básica do Word ainda te oferece 2 funções : Texto prévio e texto posterior ao dado da mesclagem.

Todas essas funções estão acessíveis clicando com o botão direito no campo de mesclagem e selecionando "Editar campo ..." e não há mistério algum nelas. As funções "avançadas" e extremamente úteis estão no selecionar com o botão direito e clicar em "Alterar códigos de campo".

As 4 formatações básicas descritas acima , formatações de texto, aparecem como: "Upper", "Lower", "FirstCap" e "Caps" e são precedidas de "\*"

Toda formatação, tem uma precedência do tipo:

\* - Formatações de Texto
\# - Formatações de Número
\@ - Formatações de data

Além dessas ainda temos as duas fuções extras:

\b - Inserir antes do campo
\f - Inserir depois do campo

Algumas formatações interessantes disponíveis para texto:

CardText - Lê um número e transforma em texto (número cardinal por extenso).
DollarText - O mesmo do anterior, porém lê os centavos e expressa em fração.

Utilizei a opção CardText para transformar o salário, campo do excel, para o valor por extenso.
A coluna do excel que trouxe com a mala direta como campo de mesclagem para o salario era "Valor_a_receber". Então ficou assim o que escrevi em "Alterar códigos de campo":
{ MERGEFIELD Valor_a_receber \* CARDTEXT }

Formatações interessantes de data:

{ MERGEFIELD CAMPO_DE_DATA \@ "dddd',' dd 'de' MMMM 'de' yyyy" }
{ MERGEFIELD CAMPO_DE_DATA \@ "dd 'de' MMMM 'de' yyyy" }
{ MERGEFIELD CAMPO_DE_HORA \@ "hh':'mm" }
{ MERGEFIELD CAMPO_DE_HORA \@ "hh':'mm':'ss" }
{ MERGEFIELD CAMPO_DE_HORA \@ "hh 'horas e' mm 'minutos'" }

O Word interpreta todos componentes do campo data e hora e pode representa-los nos seguintes formatos:

dddd = dia da semana
dd = dia do mês (obrigando dois dígitos)
d = dia do mês ( com um dígito, se possível)
MM = dia do mês ( número)
MMMM = dia do mês ( por extenso)
yy = ano ( dois dígitos)
yyyy = ano ( quatro dígitos)
hh = horas
mm = minutos
ss = segundos

A sintaxe é a seguinte:

\@ = indica o tipo da formatação como data
" (aspas duplas) = indica o início e o fim da formatação
' ( aspas simples) = inicia e finaliza a inserção de livre de texto
( espaço) = separador de campos *** Atenção *** extremamente necessário.

Repare que, passando um capo de data, você pode utilizar qualquer formato que você quiser, inclusive combinando com o texto de sua prefência.

Formatações interessantes de número:

Sempre que puxamos números do excel ou do access (em geral, dinheiro), eles vem para o word sem formato. Isso pode ser resolvido facilmente. Veja os exemplos de dinheiro em reais:

{ MERGEFIELD Valor_a_receber \# "'R$ '#.###,##" }
{ MERGEFIELD Valor_a_receber \# "#.###,##' reais'" }

A sintaxe é a mesma da data para questão do texto livre. Adicionamos #.###,## para denotar o agrupamento de dígitos (de três em três) e número de casas decimais que queremos ( duas, no caso).

No texto do recibo ficou assim:

RECIBO

Eu, { MERGEFIELD Nome_func } , declaro que recebi em { MERGEFIELD Data_Pagto \@ "dd de MMMM de yyyy" } a importância de { MERGEFIELD Valor_a_receber \# "'R$ '#.###,##" }( { MERGEFIELD Valor_a_receber \* CARDTEXT } reais e centavos acima ).



E depois de gerado para impressão, teria como exemplo o seguinte :


RECIBO

Eu, Fulano de Tal, declaro que recebi em 13 de setembro de 2010 a importância de R$ 1.234,56 ( Hum mil, duzentos e trinta e quatro reais e centavos acima).


É isso. Tem um trabalho inicial, mas poupa um tempo incrível depois de pronto!