Fórum copiar trecho do word #365118
15/10/2008
0
preciso abrir um documento do word, procurar por um trecho, selecionar e copiar.
agora vem o mais dificil: preciso pegar isso que eu joguei na clipboard e passar para uma variavel ou objeto.
depois eu varro, num loop for, 1000 documentos do word DIFERENTES. porem todos eles tem uma palavra <#substituaaqui> que vai ser localizada, substituida por aquela nossa variavel, salvar e fechar.
porque eu preciso da variavel e não posso usar a clipboard? porque durante esse loop, se o usuario apertar ctrl+c em algum lugar, o programa vai passar a colar o que o usuario copiou a partir dese ponto, e não a seleção original.
Vitor Rubio
Curtir tópico
+ 0Posts
16/10/2008
Marcosrocha
Caso não tenha êxito, volte a postar que eu arrumo um tempo pra fazer um exemplo e te mandar.
Gostei + 0
16/10/2008
Vitor Rubio
pesquisei bastante no google e achei varios lugares ensinando a abrir documentos de word.
eu posso abrir, selecionar texto, copiar para o clipboard etc e talz, mas não achei nenhuma forma de copiar o conteudo selecionado para uma variavel em vez de copiar para a clipboard.
tambem não achei uma forma de copiar o conteudo da clipboard para uma variavel.
Gostei + 0
16/10/2008
Marcosrocha
Ps.: Depois eu posto um exemplo dependendo da sua resposta (ou seja, quando eu entender pra que é o código).
Gostei + 0
16/10/2008
Vitor Rubio
eu consigo coipar o texto selecionado para a clipboard usando o metodo copy, e depois colar no outro word usando o metodo paste.
O problema em se usar a clipboard está aqui: num loop de 1000 documentos juridicos, onde eu copio um mesmo paragrafo para 1000 documentos que são diferentes, se o usuario minimizar meu programa e copiar alguma outra coisa com clrl-c o loop vai passar a colar nos documentos de word de destino restantes o que o usuario acabou de copiar, que está no clipboard, e não aquilo que eu queria.
Gostei + 0
16/10/2008
Marcosrocha
Vou elaborar um exemplo e posto aqui mais tarde
Gostei + 0
16/10/2008
Vitor Rubio
como ele faz isso? Como eu poderia fazer um gerenciador de clipboard proprio, parecido com isso? Assim eu guardaria um objeto da clipboard numa determinada posição e colaria o conteudo no word a partir deste.
Gostei + 0
17/10/2008
Emarcolongo
se quiser só abrir, substituir dê uma olhada neste topico;
[url] http://forum.devmedia.com.br/viewtopic.php?t=97988 [/url]
Ele faz isto abre um doc e altera o conteudo.
Gostei + 0
17/10/2008
Marcosrocha
Seu exemplo pode ser usado como base para ele. Só precisa implementar o loop e o texto a ser substituido. No caso ele está usando Clipboard mas pode-se usar WordApplication1.Selection.Text para jogar o texto selecionado para uma variável do tipo String, por exemplo.
Gostei + 0
17/10/2008
Vitor Rubio
São documentos jurídicos, e as assinaturas dos juízes sempre são figuras.
Eu uso isso para um juiz replicar seus pareceres, anotações e assinaturas em todos os documentos do(s) seu(s) processos ou sob sua custodia.
Gostei + 0
17/10/2008
Vitor Rubio
o método que você falou funcionou parcialmente. Consegui copiar de um word para o outro um trecho de texto selecionado, sem passar pelo clipboard. o problema é que não consegui copiar a formatação.
Gostei + 0
17/10/2008
Vitor Rubio
docWord := CreateOleObject(´Word.Application´); docWord.Visible := True; Contrato := docWord.Documents; Doc := Contrato.Open(´D:\vitor\word2\origem.doc´); doc.Range.Select; docWord2 := CreateOleObject(´Word.Application´); docWord2.Visible := True; Contrato2 := docWord.Documents; Doc2 := Contrato.Open(´D:\vitor\word2\destino.doc´); Doc2.Content.Find.Execute(FindText := ´<#TexotoColado>´, ReplaceWith := doc.Range);
porem ainda não está copiando a formatação e os demais elementos.
Gostei + 0
20/10/2008
Vitor Rubio
procurei em tudo quanto é lugar.
Se tem alguma revista clube delphi falando disso deve ser uma edição que eu não tenho.
valew!
Gostei + 0
19/12/2018
Marcos D
[code:1:ff37ce28e0] docWord := CreateOleObject(´Word.Application´);
docWord.Visible := True;
Contrato := docWord.Documents;
Doc := Contrato.Open(´D:\\vitor\\word2\\origem.doc´);
doc.Range.Select;
docWord2 := CreateOleObject(´Word.Application´);
docWord2.Visible := True;
Contrato2 := docWord.Documents;
Doc2 := Contrato.Open(´D:\\vitor\\word2\\destino.doc´);
Doc2.Content.Find.Execute(FindText := ´<#TexotoColado>´, ReplaceWith := doc.Range);[/code:1:ff37ce28e0]
porem ainda não está copiando a formatação e os demais elementos.
procedure TesteDocWord;
procedure WordReplace(pSelOrigem, pSelDestino: Variant; pTextoProcurado: string);
begin
pSelDestino.Find.Forward := True;
pSelDestino.Find.ClearFormatting;
pSelDestino.Find.MatchWholeWord := True;
pSelDestino.Find.Execute(pTextoProcurado);
if pSelDestino.Text = pTextoProcurado then
begin
pSelOrigem.Copy;
pSelDestino.Paste;
end;
end;
var
lWord: Variant;
lDocOrigem, lDocDestino: Olevariant;
begin
lWord := CreateOleObject('Word.Application');
try
lWord.Visible := True;
lDocOrigem := lWord.Documents.Open('c:\\temp\\Origem.doc');
lDocOrigem.Range.Select;
lDocDestino := lWord.Documents.Open('c:\\temp\\Modelo.doc');
WordReplace(lDocOrigem.Range, lDocDestino.Content, '<#CustomTextTag>');
lDocDestino.SaveAs2('c:\\temp\\Destino.doc');
finally
lWord.Quit;
lWord := Unassigned;
lDocOrigem := Unassigned;
lDocDestino := Unassigned;
end;
end;
Gostei + 0
21/12/2018
Marcos D
[code:1:ff37ce28e0] docWord := CreateOleObject(´Word.Application´);
docWord.Visible := True;
Contrato := docWord.Documents;
Doc := Contrato.Open(´D:\\\\vitor\\\\word2\\\\origem.doc´);
doc.Range.Select;
docWord2 := CreateOleObject(´Word.Application´);
docWord2.Visible := True;
Contrato2 := docWord.Documents;
Doc2 := Contrato.Open(´D:\\\\vitor\\\\word2\\\\destino.doc´);
Doc2.Content.Find.Execute(FindText := ´<#TexotoColado>´, ReplaceWith := doc.Range);[/code:1:ff37ce28e0]
porem ainda não está copiando a formatação e os demais elementos.
procedure TesteDocWord;
procedure WordReplace(pSelOrigem, pSelDestino: Variant; pTextoProcurado: string);
begin
pSelDestino.Find.Forward := True;
pSelDestino.Find.ClearFormatting;
pSelDestino.Find.MatchWholeWord := True;
pSelDestino.Find.Execute(pTextoProcurado);
if pSelDestino.Text = pTextoProcurado then
begin
pSelOrigem.Copy;
pSelDestino.Paste;
end;
end;
var
lWord: Variant;
lDocOrigem, lDocDestino: Olevariant;
begin
lWord := CreateOleObject('Word.Application');
try
lWord.Visible := True;
lDocOrigem := lWord.Documents.Open('c:\\\\temp\\\\Origem.doc');
lDocOrigem.Range.Select;
lDocDestino := lWord.Documents.Open('c:\\\\temp\\\\Modelo.doc');
WordReplace(lDocOrigem.Range, lDocDestino.Content, '<#CustomTextTag>');
lDocDestino.SaveAs2('c:\\\\temp\\\\Destino.doc');
finally
lWord.Quit;
lWord := Unassigned;
lDocOrigem := Unassigned;
lDocDestino := Unassigned;
end;
end;
Complementando o exemplo citado acima, consegui não utilizar o ClipBoard, utilizando o "FormattedText":
procedure WordReplace(pSelOrigem, pSelDestino: Variant; pTextoProcurado: string);
begin
pSelDestino.Find.Forward := True;
pSelDestino.Find.ClearFormatting;
pSelDestino.Find.MatchWholeWord := True;
pSelDestino.Find.Execute(pTextoProcurado);
if pSelDestino.Text = pTextoProcurado then
begin
//pSelOrigem.Copy;
//pSelDestino.Paste;
pSelDestino.FormattedText := pSelOrigem;
end;
end;Gostei + 0
16/12/2020
Laercio Geronymo
preciso abrir um documento do word, procurar por um trecho, selecionar e copiar.
agora vem o mais dificil: preciso pegar isso que eu joguei na clipboard e passar para uma variavel ou objeto.
depois eu varro, num loop for, 1000 documentos do word DIFERENTES. porem todos eles tem uma palavra <#substituaaqui> que vai ser localizada, substituida por aquela nossa variavel, salvar e fechar.
porque eu preciso da variavel e não posso usar a clipboard? porque durante esse loop, se o usuario apertar ctrl+c em algum lugar, o programa vai passar a colar o que o usuario copiou a partir dese ponto, e não a seleção original.
procedure TfrmFuncionario.sbImprimirOSClick(Sender: TObject);
var
MSWord: OleVariant;
v_dd, v_mm, v_aa, v_TipoRisco, NomeDoc: String;
linha, linhaP, v_Linha, I: integer;
const
wdHeaderFooterPrimary = 1;
begin
if (tbFuncOS.RecordCount > 0) and (tbRiscoFunOS.RecordCount > 0) then
begin
Mdadosempr.Text := tbFuncOSDadosEmpr.Value;
Mresumo.Text := tbFuncOSDados0.Value;
Mrisco.Text := '';
Mlesao.Text := '';
Melimina.Text:='';
NomeDoc:= 'MODELO OS.doc';
MSWord := CreateOleObject('Word.Application');
{ Será aberto seu documento com o parametro a ser substituido }
MSWord.Application.Documents.Open(ExtractFilePath(Application.ExeName) + NomeDoc);
// Inicia aqui
// Limpo os parametros de busca do word
MSWord.Application.Selection.Find.ClearFormatting;
{ Adiciono no find o parametro que quero buscar dentro do word e abaixo esta selecionado as condições }
MSWord.Application.Selection.Find.Text := '@nome';
MSWord.Application.Selection.Find.Replacement.Text := '';
MSWord.Application.Selection.Find.Forward := true;
MSWord.Application.Selection.Find.Format := False;
MSWord.Application.Selection.Find.MatchCase := False;
MSWord.Application.Selection.Find.MatchWholeWord := False;
MSWord.Application.Selection.Find.MatchWildcards := False;
MSWord.Application.Selection.Find.MatchSoundsLike := False;
MSWord.Application.Selection.Find.MatchAllWordForms := False;
// Executo o pesquisa, o parametro se estiver no texto vai ficar selecionado
MSWord.Application.Selection.Find.Execute;
if MSWord.Application.Selection.Find.Found then { verifica se achou }
// Substituo o parametro selecionado pelo texto que esta eu quero
MSWord.Application.Selection.TypeText(frmFuncionario.tbFuncNome.Text);
MSWord.Application.Selection.Find.Text := '@cargo';
MSWord.Application.Selection.Find.Replacement.Text := '';
MSWord.Application.Selection.Find.Forward := true;
MSWord.Application.Selection.Find.Format := False;
MSWord.Application.Selection.Find.MatchCase := False;
MSWord.Application.Selection.Find.MatchWholeWord := False;
MSWord.Application.Selection.Find.MatchWildcards := False;
MSWord.Application.Selection.Find.MatchSoundsLike := False;
MSWord.Application.Selection.Find.MatchAllWordForms := False;
// Executo o pesquisa, o parametro se estiver no texto vai ficar selecionado
MSWord.Application.Selection.Find.Execute;
if MSWord.Application.Selection.Find.Found then { verifica se achou }
// Substituo o parametro selecionado pelo texto que esta eu quero
MSWord.Application.Selection.TypeText(frmFuncionario.tbFuncv_Cargo.Text);
// Salvar Documento
Messagedlg('Se não visualizar a OS, verifique na barra de ferramentas do windows.... Ok!!!',mtWarning,[mbOk],0);
editnome.Text:=frmFuncionario.tbFuncNome.Text + '.doc';
// Deixo o word visivel
MSWord.Visible := true;
MSWord.ActiveDocument.SaveAs(editnome.Text,0);
// MSWord.Quit;
end
else
ShowMessage('Não existe O.S. lançada no funcionário... Lance a O.S. para imprimir... Ok!!!');
end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)