Avatar 0 Denunciar post Postado Junho 18, 2009 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
Avatar 0 Denunciar post Postado Junho 19, 2009 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