Trocar vários campos no Word.

Delphi

25/07/2014

Boa Tarde,

Uso o Delphi 7 e faço a impressão de um texto no word trocando alguns campos com o comando

MsWord.Content.Find.Execute(FindText := '<Data>', ReplaceWith := formataData(Now));

Porém, se no meu arquivo do WORD tiver o campo <Data> mais de uma vez, não será substituída.

Como faço para substituir todos os campos?

Desde já agradeço.
Dirceu Morais

Dirceu Morais

Curtidas 0

Respostas

Dirceu Morais

Dirceu Morais

25/07/2014

Consegui resolver,

Acrescentei replace := 2 ao final do comando e funfou, ficou assim:


MsWord.Content.Find.Execute(FindText := '<Data>', ReplaceWith := formataData(Now), replace := 2);


Obrigado a todos.
GOSTEI 0
Dirceu Morais

Dirceu Morais

25/07/2014

Pessoal agora estou tentando preencher o cabeçalho do meu arquivo DOC e não estou conseguindo.

Se eu testar criando um arquivo novo conforme código abaixo dá certo.
procedure TForm1.Button1Click(Sender: TObject);
var
  Word: Variant;
begin
  { Abre o Word }
  Word := CreateOleObject('Word.Application');
  try
    { Aqui *** Novo documento ** }
    Word.Documents.Add;
    try
      { Adiciona tabela de 2 linhas e 3 colunas }
      Word.ActiveDocument.Tables.Add(
        Range := Word.Selection.Range,
        NumRows := 2,
        NumColumns := 3);
      { Escreve na primeira célula }
      Word.Selection.TypeText(Text := 'Linha 1, Coluna 1');
      { Próxima célula }
      Word.Selection.MoveRight(12);
      { Escreve }
      Word.Selection.TypeText(Text := 'Linha 1, Coluna 2');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 1, Coluna 3');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 1');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 2');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 3');
      { Auto-Formata }
      Word.Selection.Tables.Item(1).Select; { Seleciona a 1º tabela }
      Word.Selection.Cells.AutoFit; { auto-formata }
      { Imprime 1 cópia }
      Word.ActiveDocument.PrintOut(Copies := 1);
      ShowMessage('Aguarde o término da impressão...');
      { Para salvar... }
      Word.ActiveDocument.SaveAs(FileName := 'c:\Tabela.doc');
    finally
      { Fecha documento }
      Word.ActiveDocument.Close(SaveChanges := 0);
    end;
  finally
    { Fecha o Word }
    Word.Quit;
  end;
end;


Mas eu já tenho o meu texto pronto, da erro "method selection not supported"
procedure TForm1.Button1Click(Sender: TObject);
var
  Word: Variant;
begin
  { Abre o Word }
  Word := CreateOleObject('Word.Application');
  try
      SavePath := ExtractFilePath(Application.ExeName);
     //Se cria uma copia para proteger a MATRIZ
     //Se arquivo já existe apaga, para criar um novo
      If FileExists(SavePath+ 'Ficha.doc') Then
         DeleteFile(SavePath+ 'Ficha.doc');

      CopyFile(pchar(txtCaminhoFormula.Text),pchar(SavePath+ 'Ficha.doc'),true);
     //Abre o documento
      Word := NewWord.Documents.Open(SavePath+ 'Ficha.doc');

    try
      { Adiciona tabela de 2 linhas e 3 colunas }

//DÁ ERRO ARQUI
method selection not supported

      Word.ActiveDocument.Tables.Add(
        Range := Word.Selection.Range,
        NumRows := 2,
        NumColumns := 3);
      { Escreve na primeira célula }

//DÁ ERRO ARQUI
method selection not supported

      Word.Selection.TypeText(Text := 'Linha 1, Coluna 1');
      { Próxima célula }
      Word.Selection.MoveRight(12);
      { Escreve }
      Word.Selection.TypeText(Text := 'Linha 1, Coluna 2');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 1, Coluna 3');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 1');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 2');
      Word.Selection.MoveRight(12);
      Word.Selection.TypeText(Text := 'Linha 2, Coluna 3');
      { Auto-Formata }
      Word.Selection.Tables.Item(1).Select; { Seleciona a 1º tabela }
      Word.Selection.Cells.AutoFit; { auto-formata }
      { Imprime 1 cópia }
      Word.ActiveDocument.PrintOut(Copies := 1);
      ShowMessage('Aguarde o término da impressão...');
      { Para salvar... }
      Word.ActiveDocument.SaveAs(FileName := 'c:\Tabela.doc');
    finally
      { Fecha documento }
      Word.ActiveDocument.Close(SaveChanges := 0);
    end;
  finally
    { Fecha o Word }
    Word.Quit;
  end;
end;      
GOSTEI 0
POSTAR