Você está na página 1de 9

1Processamento de Relatório MS-WORD via Delphi – By frcs 2003

ferfox@bol.com.br

Processamento de
Relatório MS-WORD
via Delphi

1
2Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br
Mostrarei como utilizar o Delphi para gerar documentos
do Microsoft Word da maneira mais direta a possível.
É lamentável que o help do Delphi não cubra este
assunto, talvez, por ser um tanto extenso, já que ele tem
haver com as funcionalidades do Word que são bastante
extensas.
Eu aprendi inicialmente a fazer o Delphi gerar arquivos
do Word, via Google. Lá, uns sites obscuros (uns em Russo,
Alemão, Japonês, etc) mostravam mais ou menos como fazer.
Também foi útil a página da Microsoft, lá tem uns
tutoriais de Visual Basic onde altos comandos podem ser
aproveitados.
Sem mais bla-bla-bla ,vamos começar:
Existem duas maneiras de fazer um documento: Na torança,
Ou com o auxílio de componentes do Delphi. Cada uma tem suas
vantagens.

1. Na Torança
a. Você terá mais controle do que faz;
b. Sem erros de RPC (uma coisa que acontecia direto);
c. É muito mais trabalhoso (isso é um fato a se
considerar);

2. Componentes
a. É bem mais intuitivo;
b. Mais fácil de fazer analogias com os comandos em
Visual Basic;

Aqui eu abordarei com a utilização de componentes do


Delphi e no fim, mostrarei mais ou menos como seria
feito da forma mais trabalhosa.

Utilizei Delphi 5 e no mesmo local deste documento deve


estar o arquivo fonte.

2
3Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br
Minha proposta será de um relatório de uma consulta de
uma clínica veterinária, terão várias entidades interessantes
para serem remetidas ao Word, como tabelas, labels, e campos
formatados (figura 1).
Obviamente por uma questão de simplicidade,
ocultarei informações secundárias como banco de dados e como
deixar o formulário bem feito (isso aí cada um que se vire).

O programa exemplo apresenta o seguinte aspecto geral:

fig.1

Quando o usuário clicar em gerar relatório, o arquivo


Word gerado, deve estar idêntico ao template que se encontra
no fim do tutorial.

Como estamos trabalhando com os componentes do Word,


você agora deve colocar dentro de seu formulário os seguintes
componentes na palela Servers (figura 2):
- WordApplication
- WordDocument

fig.2

3
4Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br
Chamaremos o primeiro de wapp e o segundo de wdoc.
O que cada um deles faz, com absoluta certeza não tenho
como dizer, mas suponho que o primeiro é necessário para
manipular o aplicativo em níveis de inicialização e escrita,
enquanto o segundo seria útil para inserirmos entidades como
fotos, macros, cabeçalho em um documento ativo.

Vamos por a mão na massa, clique agora no botão criado


(Gerar Relatório), e lá dentro vamos fazer nossa ficha médica
sair.
Escreva:
// para criar um aplicativo do word
wapp.Connect;
// para adicionar um documento ao aplicativo
wapp.Documents.Add(EmptyParam,EmptyParam);
// para conectar o documento ao aplicativo
wdoc.ConnectTo(wapp.ActiveDocument);

Pronto, a partir de agora, se você colocar abaixo disto


a linha: wapp.Visible:=True;
Aparecerá um documento em branco do Word, contudo, vamos
deixá- la comentada e vamos rechear nosso documento do Word
com os dados da clínica veterinária.

Construindo o Relatório
O relatório está todo escrito com fonte do tipo Arial,
então passamos o seguinte comando:

wapp.Selection.Font.Name:='arial';

O início dele está também em negrito, então passamos no


Delphi o seguinte comando:

wapp.Selection.Font.Bold:=1;

Será que você notou que estamos usando o comando extra


Select para manipular nosso documento? Senão, tenha em mente
que tudo aquilo que você clicar no menu do Word utilizará
este comando. Daqui para frente se você quiser, utilize a
cláusula wapp.with do Delphi, isso te poupará bastante código
escrito.
Se quisermos modificar o tamanho da fonte, você já pode
dar um chute de como será a fonte se tiver tamanho 14...

wapp.Selection.Font.Size:=14;

4
5Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br

Podemos agora começar a escrever coisas no relatório que


estamos montando, o comando você já imagina qual é:

wapp.Selection.TypeText('escreva aqui!');

E para pular uma linha ein? Ou seja, como fazer o Delphi


apertar a tecla Enter?

wapp.Selection.TypeParagraph;

Para pular uma linha também é válido colocar o caractere


newline do Delphi, é só no fim de cada palavra concatenarmos
o já conhecido #13.

Inserindo uma Tabela


Uma das coisas mais relevantes que você pode fazer em um
documento, é a inserção de tabelas, e como tudo é meio óbvio
nesse mundo estranho que é o relacionamento Delphi X Word,

wapp.Selection.Tables.Add(wapp.Selection.Range,10,10);

Com este comando você está separando uma área do


documento (uma Range), e colocando nele uma tabela de 10
(dez) linhas e 10 (dez) colunas. Ou seja, com mais um pouco
de técnica nós poderemos preencher as células da tabela com
os dados em questão, no caso, as vacinas do animal.
O Delphi projetará a tabela de forma que os dados devem
ser colados imediatamente após a sua criação, assim, vamos
colocar um comandinhi para de dentro da tabela, pularmos para
a linha seguinte:
 Primeiro, crie uma variável BAIXO:OleVariant;
 Inicialize- a com 2
 Utilize após escrever algo em uma célula o comando:
 wapp.Selection.MoveRight(EmptyParam,BAIXO,EmptyParam);
Desta forma, você pode escrever na célula e pular para a
linha de baixo... e assim vai.

Já para preencher uma célula é só utilizar o comando


TypeText como foi mostrado antes. Lembrem-se de usar o
comando (wapp.Disconnect;) sempre é bom, pois podem
aparecer uns erros de RPC.

5
6Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br

Pronto, chegamos ao fim do tutorial, como vemos a coisa


é metódica... Eu não espero estar sendo extremamente correto,
mas este é melhor que posso fazer tenho em vista o tempo que
é pouco (estudo, trabalho, namorada, etc...).
Notei que existem algumas falhas nele, mas nada que
alguém não possa ajeitar com um pouco de tempo e paciência.
Agora no fim coloco alguns comandos de bandeja para ajudá-los
dos a dar um trato no relatório.

{ mudar alinhamento do texto (0 = esquerdo, 1 =


centralizado, 2 = direito )

wapp.Selection.ParagraphFormat.Alignment:=1;

// setar o tamanho da coluna 1 de uma tabela

wapp.Selection.Tables.Item(1).Columns.Item(1).SetWidth(100,
wdAdjustNone);

// Mandar a impressora imprimir o relatório


wapp.PrintOut

Tudo isto eu aprendi com base em erros e testes e


garanto que não sei 90% do assunto, contudo deve ser uma mão
na roda! Fique livre para me escrever dizendo o que achou
deste tutorial (o primeiro que eu faço), mande uma mensagem
para: ferfox@bol.com.br .

6
7Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br

(Modelo proposto de Relatório)

Clínica Veterinária Pet Legal


Dr. Dráuzio Balela – CRV- 33278

Endereço: Rua Pres. Fernando Henrique Cardoso, 1313 loja- 08 Brasília – DF


CEP- 51130-995

Data de Atendimento: 12/03/2003

Cliente: Antônio Castro S. Souza


Número: 889
Animal: Gato
Sexo: M
Nome: Tonho
Raça: Brazilian Short Hair

Vacinas
Vermífuga
Ferro

Prescrição:

Peso abaixo do normal e problemas gástricos leves, apresenta perda de pêlos na região
auricular.
- Aplicação intra- venosa de vermífugo
- Aplicação intra- venosa de ferro (10ml por quilo)
- Banho de solução salina 3 vezes por semana durante 1 mes

___________________________________________
Dr. Dráuzio Balela - Veterinário

7
8Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br

Fazendo na Tora
Aqui está a parte onde você pode fazer tudo na tora, sem
nenhum componente. Ela dá menos erros, mas requer atenção
redobrada e perder-se a grande ajuda do Code Completion.

1-
criar uma variável global : Dword:Variant

2-
Interno à Função declarar uma variável: var S:OleVariant

3-
Dword := CreateOleObject('Word.Application');
**cria um aplicativo do Word

4-
Dword.Documents.Add;
**cria um documento do microsoft word

5-
S := Dword.Selection;
**atribui à S o documento do word que foi construído

6-
Dword.ActiveDocument.PrintOut;
**clica no botão imprimir

7-
S.ParagraphFormat.Alignment :=0;
**coloca o alinhamento à esquerda

8-
S.TypeParagraph;
**pula uma linha

9-
S.Font.size := 12;
S.Font.Bold := 1;
**Para manipular as fontes

8
9Processamento de Relatório MS-WORD via Delphi – By frcs 2003
ferfox@bol.com.br
10-
S.TypeText('meu texto');
**escreve no word o texto entre as quotes

11-
S.Tables.Add(S.Range,numero_de_linhas,numero_de_colunas);
**para especificar uma tabela

12-
S.Tables.Item(1).Columns.Item(2).SetWidth(250,wdAdjustNone);
**está setando o comprimento da segunda coluna da tabela
criada e sem setar a posição do texto interno à célula

13-
S.Tables.Item(1).Cell(1,1).Range.InsertAfter('texto');
**após a tabela criada, escreve texto na célula (1,1)

14-
Dword.Application.Visible := True;
**torna o documento visível