1Processamento de Relatório MS-WORD via Delphi – By frcs 2003
[email protected]
Processamento de Relatório MS-WORD via Delphi 1
2Processamento de Relatório MS-WORD via Delphi – By frcs 2003
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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
[email protected]
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 centralizado, 2 = direito )
texto
(0
=
esquerdo,
1
=
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:
[email protected] .
6
7Processamento de Relatório MS-WORD via Delphi – By frcs 2003
[email protected] (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
[email protected]
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. 1criar uma variável global : Dword:Variant 2Interno à Função declarar uma variável: var S:OleVariant 3Dword := CreateOleObject('Word.Application'); **cria um aplicativo do Word 4Dword.Documents.Add; **cria um documento do microsoft word 5S := Dword.Selection; **atribui à S o documento do word que foi construído 6Dword.ActiveDocument.PrintOut; **clica no botão imprimir 7S.ParagraphFormat.Alignment :=0; **coloca o alinhamento à esquerda 8S.TypeParagraph; **pula uma linha 9S.Font.size := 12; S.Font.Bold := 1; **Para manipular as fontes
8
9Processamento de Relatório MS-WORD via Delphi – By frcs 2003
[email protected]
10S.TypeText('meu texto'); **escreve no word o texto entre as quotes 11S.Tables.Add(S.Range,numero_de_linhas,numero_de_colunas); **para especificar uma tabela 12S.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 13S.Tables.Item(1).Cell(1,1).Range.InsertAfter('texto'); **após a tabela criada, escreve texto na célula (1,1) 14Dword.Application.Visible := True; **torna o documento visível
9