Ir para conteúdo

POWERED BY:

Arquivado

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

Angelice

[Resolvido] Manipular Word via Delphi

Recommended Posts

Olá Pessoal,

 

Dei uma pesquisada no forum e em alguns locais na net e não encontrei exatamente oq preciso.

Preciso incluir uma tabela no word via delphi, dentro de um documento já existente.

No caso é um contrato, preciso incluir uma tabela com os registros de uma query, mas preciso que essa tabela fique no meio do texto do contrato, em um local específico.

Encontrei varias formas de incluir tabela e substituir texto no word via delphi, mas em todas as formas que testei a tabela é incluída no inicio do documento.

 

Será que alguém pode me ajudar?

 

Muito Obrigada

Angelice

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o código que você está usando e se possível um exemplo de como gostaria de fazer a manipulação do arquivo para ver o que podemos fazer para ajudá-la.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que tenho é o seguinte:

 

	 // Cria objeto principal de controle
	  WinWord := CreateOleObject('Word.Application');
	  // Mostra o Word
	  WinWord.Visible := true;
	  // Pega uma interface para o objeto que manipula documentos
	  Docs := WinWord.Documents;
	  // Abre um Documento
	  Doc := Docs.Open(Path+'Recibo.Doc');

	  // Substitui texto via "name parameters"
	  Doc.Content.Find.Execute(FindText := '%desc_instrumento', ReplaceWith := DMPenhorCedular.QPenhorCedularCadDESC_INSTRUMENTO_CREDITO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%num_instrumento', ReplaceWith := DMPenhorCedular.QPenhorCedularCadNUM_INSTRUMENTO_CREDITO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%dt_instrumento', ReplaceWith := DMPenhorCedular.QPenhorCedularCadDT_EMISSAO_INSTRUMENTO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cliente', ReplaceWith := DMCadastro.QCadastroNome.Value, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cpf_cliente', ReplaceWith := DMCadastro.QCadastroNum_Cgc_Cpf.Value, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%endereco_cliente', ReplaceWith := DMCadastro.QCadastroDesc_Endereco.Value, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cidade_cliente', ReplaceWith := DMCadastro.QCadastroDesc_Cidade.Value, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%estado_cliente', ReplaceWith := DMCadastro.QCadastroCod_Estado.Value, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%banco', ReplaceWith := DMBancoAgencia.QBancoAgenciaDESC_BANCO_AGENCIA.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%banCidade', ReplaceWith := DMBancoAgencia.QBancoAgenciaDESC_CIDADE.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%banEstado', ReplaceWith := DMBancoAgencia.QBancoAgenciaCOD_ESTADO.Text, Replace:=2);

	  DMPenhorCedular.QBloqueio_Produtos.First;
	  while not DMPenhorCedular.QBloqueio_Produtos.Eof do begin 
		  wProduto := DmOracle.BuscaNome('SELECT DESC_PRODUTO FROM TB_PRODUTO', 'COD_PRODUTO = ' + IntToStr(DMPenhorCedular.QBloqueio_ProdutosCOD_PRODUTO.Value));
		  wQtd:=FormatFloat('#,##0',DMPenhorCedular.QBloqueio_ProdutosSQT_QUANTIDADE.Value);
		  wQtd := wQtd + ' (' +Bib.Extenso( DMPenhorCedular.QBloqueio_ProdutosSQT_QUANTIDADE.Value, 'KG') + ') quilogramas.';
		  wQtd := trim(ReplaceStr(wQtd,' Quilos.',''));

		  Doc.Content.Find.Execute(FindText := '%desc_produto', ReplaceWith := 'Produto.........: '+wProduto, Replace:=2);
		  Doc.Content.Find.Execute(FindText := '%ano_safra', ReplaceWith := 'Safra.............: '+DMPenhorCedular.QPenhorCedularCadDT_ANO_SAFRA.Text, Replace:=2);
		  Doc.Content.Find.Execute(FindText := '%qtd', ReplaceWith := 'Quantidade...: '+ wQtd, Replace:=2);

		DMPenhorCedular.QBloqueio_Produtos.Next;
	  end;


	  Doc.Content.Find.Execute(FindText := '%filial_cidade', ReplaceWith := DMFilial.QFilialDESC_CIDADE.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%filial_uf', ReplaceWith := DMFilial.QFilialCOD_ESTADO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%filial_end', ReplaceWith := DMFilial.QFilialDESC_ENDERECO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%desc_filial', ReplaceWith := DMFilial.QFilialDESC_FILIAL.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cnpj_filial', ReplaceWith := DMFilial.QFilialNUM_CGC.Text , Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%dt_emissao', ReplaceWith := DMPenhorCedular.QPenhorCedularCadDT_EMISSAO.Text, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cda_end', ReplaceWith := cda_end, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cda_num', ReplaceWith := cda_num, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cda_mat', ReplaceWith := cda_mat, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cda_cart', ReplaceWith := cda_desc_cart, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%nome_fiel_dep', ReplaceWith := y[0], Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%cpf_fiel_dep', ReplaceWith := y[1], Replace:=2);

	  wData := FormatDateTime('dd "de" MMMM "de" yyyy', Date);
	  Doc.Content.Find.Execute(FindText := '%dt_geracao', ReplaceWith := wData, Replace:=2);
	  wData := FormatDateTime('yyyy', Date);
	  Doc.Content.Find.Execute(FindText := '%ano_geracao', ReplaceWith := wData, Replace:=2);
	  Doc.Content.Find.Execute(FindText := '%numero_penhor', ReplaceWith := DMPenhorCedular.QPenhorCedularCadNUM_PENHOR_CEDULAR.value, Replace:=2);
	  // Grava documento
	  Doc.SaveAs(Path+'Recibo1.Doc');

E o Recibo.doc está configurado da seguinte maneira:

 

Recibo nº. %numero_penhor/%ano_geracao

Recebemos do Sr. %cliente os bens abaixo descritos, gravados em penhor cedular, a favor do %banco, Agência de %banCidade – %banEstado, conforme %desc_instrumento, nº. %num_instrumento, emitido(a) em %dt_instrumento.

Esses bens ficam depositados à ordem do %banco em %banCidade – %banEstado, para guarda e conservação, nos termos da Lei, ficando desde já entendido que o Sr(a). %cliente não os poderá utilizar, retirando-os, no todo ou em parte, do referido armazém, ou mandando transferí-los para nome ou disposições de terceiros, sem autorização escrita do %banco, podendo este, a qualquer tempo, independentemente da aquisciência do devedor , exigir do depositário a entrega dos bens, sob as penas da Lei (art. 652 do código Civil).

A especificação dos bens depositados é a seguinte:
	Produto.........: %desc_produto
	Safra.............: %ano_safra
	Quantidade...: %qtd

Imóvel de localização dos bens vinculados:
Endereço......: %cda_end.
CDA..............: %cda_num
Matrícula.......: %cda_mat
Cartório.........: %cda_cart

%filial_cidade, %dt_geracao.



____________________________________
%desc_filial  
Fiel Depositário

No código onde tem o loop, da forma que está ele sempre vai buscar as variaveis %desc_produto, %ano_safra, %qtd e substituí-las.

O que eu preciso que é seja incluido cada produto, ou seja, se tiver 10 registros na QBloqueio_Produtos, os 10 devem aparecer no recibo.

Já tentei utilizando tabela, inclui dentro do loop, mas ela vai pro inicio do documento e não fica no local indicado.

Tentei incluir linhas tbém, mas da mesma forma elas são incluidas no inicio do documento.

 

Por favor, preciso urgente resolver isso.

Muito Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, consegui resolver o problema, não sei se é a melhor forma e tbém não entendi muito bem como funciona, mas deu certo, ta funcionando.

Criei a tabela e informei o Start e End do Range, então ela fica onde informei e não no inicio do documento. Só que nesse caso é um valor fixo (900), não sei como incluir um variavel que seja o valor do local do ultimo texto do documento antes da inclusão da tabela.

Então inclui o código para incluir as linhas dentro do loop.

Segue o código abaixo:

 

tblNew := WinWord.ActiveDocument.Tables.Add(Range := WinWord.ActiveDocument.Range(Start := 900, End := 900),NumRows := DMPenhorCedular.QBloqueio_Produtos.RecordCount*3, NumColumns := 1);


	  intRow := 1;
	  while not DMPenhorCedular.QBloqueio_Produtos.EOF do
	  begin
		  wProduto := DmOracle.BuscaNome('SELECT DESC_PRODUTO FROM TB_PRODUTO', 'COD_PRODUTO = ' + IntToStr(DMPenhorCedular.QBloqueio_ProdutosCOD_PRODUTO.Value));
		  wQtd:=FormatFloat('#,##0',DMPenhorCedular.QBloqueio_ProdutosSQT_QUANTIDADE.Value);
		  wQtd := wQtd + ' (' +Bib.Extenso( DMPenhorCedular.QBloqueio_ProdutosSQT_QUANTIDADE.Value, 'KG') + ') quilogramas.';
		  wQtd := trim(ReplaceStr(wQtd,' Quilos.',''));

		  tblNew.Cell(Row := intRow, Column := 1).Range.InsertAfter(Text := 'Produto.........: '+wProduto);
		  Inc(IntRow);
		  tblNew.Cell(Row := intRow, Column := 1).Range.InsertAfter(Text := 'Safra.............: '+DMPenhorCedular.QPenhorCedularCadDT_ANO_SAFRA.Text);
		  Inc(IntRow);
		  tblNew.Cell(Row := intRow, Column := 1).Range.InsertAfter(Text := 'Quantidade...: '+wQtd);
		  Inc(IntRow);		  

		DMPenhorCedular.QBloqueio_Produtos.Next;
	  end;

	  tblNew.Range.Font.Size := 10;
	  tblNew.Range.Font.Name := 'Arial';

Valeu

 

Abraços

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.