Integração com word impressão em massa
04/06/2008
0
procurei bastante por aqui e não encontrei, por avor, se já houver algum tópico relacionado aos meus questionamentos, solicito que seja informado o link.
Há um tempo atrás, desenvolvi uma aplicação onde era montado um contrato de serviço no word, usando substituição de tags.
gerei um arquivo padrao somente leitura (para o usuario nao salvar sem querer) e expliquei ao cliente como editar as tags...
até aí está tudo ok.
porém, recentemente o cliente solicitou uma alteração no sistema que seria um cadastro simples de funcionários, desta forma, seria definida, semanalmente, uma listagem de funcionários que trabalharam na semana, em qual evento eles trabalharam, valor, data, etc...
ok..
montei um arquivo matriz no word, com as tags, no padrão que o cliente já está acostumado...
porém, esbarrei em um problema...
a idéia principal é: pegar esta listagem, e, para cada item, abrir o doc do word, alterar as tags, imprimir e fechar o doc do word...
só que estou com uns problemas...
[b:d610ac56ff]primeiro[/b:d610ac56ff]: como eu seleciono para qual impressora que quero enviar os dados (já que, no primeiro arquivo que criei (antigo), eu abria o word e mantinha aberto, o cliente verificava, alterava o necessário e imprimia manualmente)... no caso atual, serão impressos mais de 30 documentos por vez, ficando inviável a interação com o usuário a cada impressão...
[b:d610ac56ff]segundo[/b:d610ac56ff]: quando mando fechar o doc ele pede para salvar, há alguma maneira de suprimir isto ? e como meu arquivo é somente leitura, é gerado um erro também, mas creio que seria suprimido se eu conseguir fechar o doc sem salvar ;)
bom, estas são as minhas principais tormentas do momento.
agradeço sinceramente a todos que estiveram aqui, nem que seja para somente ler...
obrigado.
estou contando com a ajuda de vocês...
ah !
vou colocar aqui a forma que estou trabalhando, já que acima somente citei a lógica desejada...
inicío abrindo o word
Word := CreateOleObject(´Word.Application´); Word.Visible := False; // NÃO EXIBIR PARA O USUÁRIO Docs := Word.Documents;
no loop eu faço assim:
// ABRINDO O DOCUMENTO Doc := Docs.Open(´C:\test\test.doc´); //SUBSTITUINDO AS TAGS Doc.Content.Find.Execute(FindText := ´<VALOR>´, ReplaceWith := Valor); // AQUI NO FORUM NAO VOU POR TODAS, APENAS PARA SABEREM COMO ESTOU MANIPULANDO // INICIAR IMPRESSAO Doc.PrintOut(False); // IMPRIMIR Doc.Close; // FECHAR O ARQUIVO DE DENTRO DO WORD
após o loop eu encerro o word
Word.quit; // FECHAR O WORD
quando mando o comando de impressão, ele pega minha impressora padrão, que, na verdade, nem impressora é, é um gerador de PDF :roll: por isto que queria selecionar a impressora, no cliente há várias impressoras, gostaria que ele pudesse decidir para qual enviar a impressão.
e quando dou o close no arquivo word aparece a tela de ´salvar como´, mesmo o word não estando aberto...
clico no cancelar, ele abre pra mim o arquivo do word da forma que deveria ser impresso, mas sem nenhum menu do word, apenas a barra de título...
fecho o doc, ele pergunta se eu quero salvar, digo que não, então, na minha aplicação eu vejo a seguinte mensagem de erro:
Este arquivo é somente leitura.
(C:\teste\teste.doc)
após isto ele não processa o restante da lista (faz apenas para o primeiro, e, após o erro, aborta os demais...
alguma ajdua ?
obrigado
David_farina
Posts
04/06/2008
David_farina
(na verdade este reply é pq esqueci de marcar a opção ´Notificar-me quando for respondida) no primeiro post, e como não dá pra editar, estou pondo uma resposta
:roll: :oops: :roll: :oops:
04/06/2008
David_farina
não da forma que eu gostaria... ainda procuro por uma solução melhor.. de imediato ela me serve, mas tem que ser melhorada...
consegui fechar o documento sem a tela de salvar...
para isto eu mudei um pouco a lógica...
antes:
agora:
isto torna MUITO mais lento o processo, e, PIOR que isto, ao matar o word, eu mato o processo word, ou seja, se o cliente estava com um doc importante aberto e sem salvar, já era ! perdeu... ele fecha todos os docs aberto, já que finaliza o word....
para finalizar o word eu utilizei esta dica:
[url]http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=532[/url]
que serve para finalizar qualquer aplicativo que esteja rodando no seu win...
tentei usar para fechar o doc o seguinte comando:
MSWord.ActiveDocument.Close(SaveChanges := 0);
mas dá erro
[img:69d18d8f75]http://img237.imageshack.us/img237/5738/imagemmc2.png[/img:69d18d8f75]
alguma luz ?
05/06/2008
José Henrique
Doc.Close(SaveChanges := 0); // FECHAR O ARQUIVO DE DENTRO DO WORD
ap invés de
MSWord.ActiveDocument.Close(SaveChanges := 0);
05/06/2008
José Henrique
Então creio que se fizer:
Word := CreateOleObject(´Word.Application´); Word.Visible := False; // NÃO EXIBIR PARA O USUÁRIO Word.ActivePrinter = "HP LaserJet 4 local on LPT1:"
funcione. Não testei.
Clique aqui para fazer login e interagir na Comunidade :)