Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Avatar

[Resolvido] Abrir dois documentos Word e juntar em apenas um docu

Recommended Posts

Pessoal, já há algum tempo estou quebrando a cabeça para tentar fazer um "merge" em dois documentos do Word. A minha idéia é abrir dois documentos e colocar no final do primeiro documento o segundo, transformando em apenas um documento. Após isto, alguns processamentos serão feitos, mas isto já não é problema...

O detalhe é que eu não consigo de forma alguma copiar o conteúdo do segundo arquivo dentro (ao final) do primeiro. Ou eu acabo sobrescrevendo todo o conteúdo ou eu copio todo o conteúdo de texto - mas sem a formatação - deixando as figuras, shapes e tabelas de fora.

Eu estou usando OleVariant (Ole Object) e para as demais funções (abrir, escrever, gravar, fazer replace, entre outros) está servindo perfeitamente.

Tentei usar um OleContainer - mas não fui muito feliz - no fim eu cai no mesmo problema citado acima. Mas provavelmente por não ter experiência neste componente.

 

Alguém tem uma sugestão do que dá pra fazer? Alguém já passou por isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de muita busca eu consegui achar a solução.

O problema era bem simples, na realidade, bastava executar um InsertFile (<obj Word>.Selection.InsertFile) - só que antes de fazer isto, deveria mover o cursor para o final do arquivo, senão ele substituiria o arquivo atual.

Segue ela para aqueles que precisarem:

 

procedure TForm1.Button1Click(Sender: TObject);
var
  WordDocument, Word: OLEVariant;
  Arquivo, Convesoes, SomenteLeitura, AdicionarAosArquivosRecentes,
  SenhadoDocumento, SenhaModelo, Reverter, SenhadeEscritadoDocumento,
  SenhadeEscritadoModelo, Formato, Encoding, Visivel: OleVariant;
begin
  try
	Word  := CreateOleObject('Word.Application');
	//aponta uma referência do novo documento aberto para o objeto WordDocument
	WordDocument := Word.Documents.Add;
  except
	ShowMessage('Não há o MS Word instalado !');
	Exit;
  end;
  //abre o aplicativo word enquanto executa o processamento
  Word.Visible:=True;

  Arquivo := 'C:\Doc1.Doc';
  Convesoes := False;
  SomenteLeitura := False;
  AdicionarAosArquivosRecentes := False;
  SenhadoDocumento := '';
  SenhaModelo := '';
  Reverter := True;
  SenhadeEscritadoDocumento := '';
  SenhadeEscritadoModelo := '';
  Formato := wdOpenFormatDocument;
  encoding:= '';

  WordDocument:=Word.Documents.Open(Arquivo, Convesoes, Convesoes,
									AdicionarAosArquivosRecentes, SenhadoDocumento,
									SenhaModelo, Reverter, SenhadeEscritadoDocumento,
									SenhadeEscritadoModelo, Formato, encoding, Visivel);
//realiza subs
  Str:=WordDocument.Content.Text;
  //Subst 1
  try
	Word.Selection.Find.ClearFormatting;
	Word.Selection.Find.Text := '%NOME%';
	Word.Selection.Find.Replacement.Text := 'Vagner Paludo Landskron';
	Word.Selection.Find.Forward := True;
	Word.Selection.Find.Wrap := 1;
	Word.Selection.Find.Format := False;
	Word.Selection.Find.MatchCase := False;
	Word.Selection.Find.MatchWholeWord := False;
	Word.Selection.Find.MatchWildcards := False;
	Word.Selection.Find.MatchSoundsLike := False;
	Word.Selection.Find.MatchAllWordForms := False;
	Word.Selection.Find.Execute(Replace := wdReplaceAll);
  finally
  end;

  //Subst 2
  try
	Word.Selection.Find.ClearFormatting;
	Word.Selection.Find.Text := '%IDADE%';
	Word.Selection.Find.Replacement.Text := '27';
	Word.Selection.Find.Execute(Replace := wdReplaceAll);
  finally
  end;
  //Subst 3
  try
	Word.Selection.Find.ClearFormatting;
	Word.Selection.Find.Text := '%CBL%';
	Word.Selection.Find.Replacement.Text := 'asjfh sdjhfasdj hfasdj hfasdjl hfsdjklahfjklasdhfjklasdhfjksladhfjsdhfjklasdhfljksadhfjkl ashdfjkasdhfjkshadfhasdjkfhasdjklfha sjkldfhasjklfhlak ';
	Word.Selection.Find.Execute(Replace := wdReplaceAll);
  finally
  end;
//move o cursor para o final do arquivo
  Word.Selection.EndKey(wdStory); //move o cursor para a última posição do documetno
  Word.ActiveDocument.Range(Word.Selection.Start,Word.Selection.Start).InsertBreak(); //insere uma quebra de página
  Word.Selection.EndKey(wdStory); //move o cursor para a última posição do documetno
//move o cursor para o final do arquivo
  Word.Selection.EndKey;
//faz a inserção no final do arquivo
  Word.Selection.InsertFile('c:\bk1.doc');

  WordDocument.SaveAs('C:\vagner1.Doc');
//  WordDocument.WebPagePreview;
  Word.Quit(wdDoNotSaveChanges);
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.