Angelice 0 Denunciar post Postado Março 25, 2009 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
Chrnos 30 Denunciar post Postado Março 25, 2009 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
Angelice 0 Denunciar post Postado Março 26, 2009 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
Angelice 0 Denunciar post Postado Março 26, 2009 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