Olá amigos, agora vou passar um código de como obter informações de um arquivo do Word, através do componente WordApplication da paleta Servers do Delphi. Todos os comandos abaixo foram testados em Delphi 6 e 7.
Inicie uma nova
aplicação e coloque 1 Edit, 1 OpenDialog, 1 SpeedButton, 2 ListBox’s no form, 6
Botões e um componente WordApplication.

Inicialmente declare uma
variável global chamada: DocWord do tipo _Document;
Antes de partir para a programação dos botões vamos fazer uma função que
retorna se o arquivo já foi carregado corretamente:
function TForm1.VerificaArquivo:boolean;
begin
result := true;
try
DocWord.Activate;
except
Showmessage('Arquivo ainda não carregado.');
Edit1.SetFocus;
result := false;
end;
end;
Nesta função estamos verificando se existe algum documento ativo no objeto
DocWord, para evitar erros do tipo “cliquei no botão estatísticas sem carregar
um documento”.
Agora no evento onClose do form coloque o código:
procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
var NaoSalvar, ParametroVazio: OleVariant;
begin
NaoSalvar := wdDoNotSaveChanges;
DocWord.Close(NaoSalvar,ParametroVazio,ParametroVazio);
WordApplication1.Quit;
end;
Neste procedimento fechamos o arquivo aberto no objeto DocWord sem salvar
qualquer alteração que por ventura venha a ocorrer.
Vamos agora ao
speedbutton procurar:
procedure TForm1.spbProcurarClick(Sender: TObject);
begin
if OpenDialog1.Execute then
if OpenDialog1.FileName <> '' then
edit1.Text := OpenDialog1.FileName;
end;
Evento simples que serve apenas para localizar um documento do word.
Botão Carregar:
Aqui encontramos diferença de parâmetros do delphi 6 para o 7, portanto se você
for utilizar em delphi 7 utilize o código em vermelho, se você for utilizar no
delphi 6 utilize o código em azul.
Código botão carregar para Delphi 6
procedure TForm1.btnCarregarClick(Sender: TObject);
var
Arquivo, Convesoes, SomenteLeitura, AdicionarAosArquivosRecentes,
SenhadoDocumento, SenhaModelo, Reverter, SenhadeEscritadoDocumento,
SenhadeEscritadoModelo, Formato, Encoding,
Visivel: OleVariant;
begin
if Edit1.Text = '' then
begin
Showmessage('Nenhum arquivo selecionado.');
Edit1.SetFocus;
Exit;
end;
Arquivo := Edit1.Text;
Convesoes := False;
SomenteLeitura := False;
AdicionarAosArquivosRecentes := False;
SenhadoDocumento := '';
SenhaModelo := '';
Reverter := True;
SenhadeEscritadoDocumento := '';
SenhadeEscritadoModelo := '';
Formato := wdOpenFormatDocument;
encoding:= '';
Visivel := true;
Try
DocWord:=WordApplication1.Documents.Open(Arquivo, Convesoes,
Convesoes, AdicionarAosArquivosRecentes, SenhadoDocumento,
SenhaModelo, Reverter, SenhadeEscritadoDocumento, SenhadeEscritadoModelo,
Formato, encoding, Visivel);
if DocWord.Name <> '' then
Showmessage('Arquivo: '+DocWord.Name+'
carregado.');
except
Showmessage('Erro ao abrir arquivo.');
end;
end;
Código botão carregar para Delphi 7
procedure TForm1.btnCarregarClick(Sender: TObject);
var
Arquivo, Convesoes, SomenteLeitura, AdicionarAosArquivosRecentes,
SenhadoDocumento, SenhaModelo, Reverter, SenhadeEscritadoDocumento,
SenhadeEscritadoModelo, Formato, Encoding, Visivel, AbrirReparar,
NoEncoding,
DocDirection : OleVariant;
begin
if Edit1.Text = '' then
begin
Showmessage('Nenhum arquivo selecionado.');
Edit1.SetFocus;
Exit;
end;
Arquivo := Edit1.Text;
Convesoes := False;
SomenteLeitura := False;
AdicionarAosArquivosRecentes := False;
SenhadoDocumento := '';
SenhaModelo := '';
Reverter := True;
SenhadeEscritadoDocumento := '';
SenhadeEscritadoModelo := '';
Formato := wdOpenFormatDocument;
encoding:= '';
Visivel := true;
Try
DocWord:=WordApplication1.Documents.Open(Arquivo, Convesoes,
Convesoes, AdicionarAosArquivosRecentes, SenhadoDocumento,
SenhaModelo, Reverter, SenhadeEscritadoDocumento, SenhadeEscritadoModelo,
Formato, encoding, Visivel, AbrirReparar, DocDirection, NoEncoding);
if DocWord.Name <> '' then
Showmessage('Arquivo: '+DocWord.Name+'
carregado.');
except
Showmessage('Erro ao abrir arquivo.');
end;
end;
Procedure que carrega o
arquivo no objeto DocWord, se este arquivo for um documento do word válido. Como
você pode notar mudaram a quantidade de parâmetros da versão 6 do delphi para a
versão 7.
Botão Ver no Browser
procedure TForm1.btnBrowserClick(Sender: TObject);
begin
if VerificaArquivo then
DocWord.WebPagePreview;
end;
Simples evento fornecido pelo objeto criado, que é a opção de abrir o documento
no navegador padrão de internet.
Botão Estatísticas:
procedure TForm1.btnEstatisticasClick(Sender: TObject);
var ParametroVazio: OleVariant;
begin
if not VerificaArquivo then exit;
ListBox1.Clear;
ListBox1.Items.Add('Propriedades de: '+DocWord.Name);
ListBox1.Items.Add('Este arquivo contem: ');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticCharacters,ParametroVazio))+'
Caracteres sem Espaço, ');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticCharactersWithSpaces,ParametroVazio))+'
Caracteres com Espaco,');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticLines,ParametroVazio))+'
Linhas,');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticPages,ParametroVazio))+'
Páginas,');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticParagraphs,ParametroVazio))+'
Parágrafos,');
ListBox1.Items.Add(IntTostr(DocWord.ComputeStatistics
(wdStatisticWords,ParametroVazio))+'
Palavras.');
end;
Neste procedimento podemos notar as estatísticas do documento, como a opção
Ferramentas - Contar Palavras do Microsoft Word.
Temos as seguintes opções:
|
wdStatisticCharacters |
Total
de Caracteres sem espaço; |
|
wdStatisticCharactersWithSpaces |
Total
de Caracteres sem espaço; |
|
wdStatisticLines |
Total
de linhas do arquivo; |
|
wdStatisticPages |
Total
de Páginas do arquivo; |
|
wdStatisticParagraphs |
Total
de parágrafos no arquivo; |
|
wdStatisticWords |
Total
de palavras contidas no arquivo. |
Botão Propriedades:
procedure TForm1.btnPropriedadesClick(Sender: TObject);
var
documento: OleVariant;
indice:Integer;
begin
if not VerificaArquivo then exit;
documento := DocWord;
ListBox2.Clear;
ListBox2.Items.Add('Propriedades de: '+DocWord.Name);
ListBox2.Items.Add('Local: '+DocWord.Path);
for indice := 1 to documento.BuiltInDocumentProperties.Count do
begin
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name)
= 'TITLE' then
listbox2.Items.Add('Titulo: '+documento.BuiltInDocumentProperties[indice].Value);
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name)
= 'AUTHOR' then
listbox2.Items.Add('Autor: '+documento.BuiltInDocumentProperties[indice].Value);
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name)
= 'COMPANY' then
listbox2.Items.Add('Companhia: '+documento.BuiltInDocumentProperties[indice].Value);
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name)
= 'TEMPLATE' then
listbox2.Items.Add('Modelo: '+documento.BuiltInDocumentProperties[indice].Value);
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name) = 'APPLICATION
NAME' then
listbox2.Items.Add('Aplicação: '+documento.BuiltInDocumentProperties[indice].Value);
if AnsiUpperCase(documento.BuiltInDocumentProperties[indice].Name)
= 'LAST AUTHOR' then
listbox2.Items.Add('Ultimo Autor: '+documento.BuiltInDocumentProperties[indice].Value);
end;
end;
Aqui temos algumas propriedades do arquivo, como Autor, Título, Modelo, etc...
Botão Selecionar Impressora:
procedure TForm1.btnSelImpressoraClick(Sender: TObject);
begin
WordApplication1.ActivePrinter := '<nome da impressora>';
end;
Este botão tem como principal função setar a impressora para a impressão do
documento, outro evento interessante deste documento é: DocWord.PageSetup.
Botão Imprimir:
procedure TForm1.btnImprimirClick(Sender: TObject);
begin
if VerificaArquivo then
WordApplication1.PrintOut;
end;
Aqui mandamos o arquivo para a impressora padrão do Windows, ou para a
impressora selecionada anteriormente.
Botão Substituir:
procedure TForm1.btnSubstituirClick(Sender: TObject);
var Pesquisar, Substituir, substituirtodos: OleVariant;
begin
Pesquisar := 'Active';
Substituir := 'Active Delphi';
substituirtodos := wdReplaceAll;
DocWord.Content.find.Execute(pesquisar, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, Substituir, substituirtodos, EmptyParam, EmptyParam, EmptyParam,
EmptyParam);
ShowMessage('Alteracao Concluida');
end;
Neste procedimento substituímos a palavra “Active” pela palavra “Active Delphi”.
O parâmetro wdReplaceAll nos possibilita substituir todas as palavras
encontradas no documento pela palavra que especificamos na variável substituir.
Botão Salvar:
Novamente encontramos diferença nos parâmetros para salvar o arquivo da versão 6
do delphi para a versão 7. Portanto código do delphi 6 em azul e para delphi 7
em vermelho.
Código botão salvar para Delphi 6
procedure
TForm1.btnSalvarClick(Sender: TObject);
var arquivo, senha: OleVariant;
begin
try
arquivo := 'c:\TesteActiveDelphi.doc';
senha := 'gustavo';
DocWord.SaveAs(arquivo, EmptyParam, EmptyParam, senha,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam);
ShowMessage('Concluido');
except
Showmessage('Erro ao salvar.');
end;
end;
Código botão salvar para Delphi 7
procedure TForm1.btnSalvarClick(Sender: TObject);
var arquivo, senha: OleVariant;
begin
try
arquivo := 'c:\TesteActiveDelphi.doc';
senha := 'gustavo';
DocWord.SaveAs(arquivo, EmptyParam, EmptyParam, senha,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
ShowMessage('Concluido');
except
Showmessage('Erro ao salvar.');
end;
end;
E por fim, desta forma, salvamos o
arquivo no caminho especificado na variável arquivo. Definimos também na
variável senha qual será a senha para abrir o arquivo. Se você não quiser
colocar senha no arquivo apenas substitua o parâmetro onde vai a variável senha
por EmptyParam.
Bom, para finalizar, se você quiser ver o conteúdo do documento sem formatação
num RichEdit por exemplo, faça:
if VerificaArquivo then
RichEdit1.Text := DocWord.Content.Text;
Era isso aí!
Grande abraço a todos e até a próxima.
Clique aqui para fazer o download do exemplo.
Contato:
gustavocco@yahoo.com.br ou
gustavo@topsystem.com.br
|