Integração com word impressão em massa
Saudações,
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
no loop eu faço assim:
após o loop eu encerro 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
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
Curtidas 0
Respostas
David_farina
04/06/2008
vixe, ficou grande meu post :oops:
(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:
(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:
GOSTEI 0
David_farina
04/06/2008
uma parte solucionada...
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:
mas dá erro
alguma luz ?
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:
- abrir wordd
LOOP BEGIN
- abrir doc
- editar doc
- imprimir doc
- fechar doc (sem salvar)
LOOP END
- fechar word
agora:
LOOP BEGIN
- abrir wordd
- abrir doc
- editar doc
- imprimir doc
- matar word
LOOP END
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
alguma luz ?
GOSTEI 0
José Henrique
04/06/2008
Use
Doc.Close(SaveChanges := 0); // FECHAR O ARQUIVO DE DENTRO DO WORD
ap invés de
MSWord.ActiveDocument.Close(SaveChanges := 0);
Doc.Close(SaveChanges := 0); // FECHAR O ARQUIVO DE DENTRO DO WORD
ap invés de
MSWord.ActiveDocument.Close(SaveChanges := 0);
GOSTEI 0
José Henrique
04/06/2008
Do help do Word
Então creio que se fizer:
funcione. Não testei.
[b:b3c79c0443]Propriedade ActivePrinter[/b:b3c79c0443]
Consulte também Aplica-se a Exemplo Informações específicas
Retorna ou define o nome da impressora ativa. String de leitura/gravação.
Exemplo
Este exemplo exibe o nome da impressora ativa.
MsgBox ´The name of the active printer is ´ & ActivePrinter
Este exemplo torna uma impressora de rede HP LaserJet IIISi a impressora ativa.
Application.ActivePrinter = ´HP LaserJet IIISi on \\printers\laser´
Este exemplo torna uma impressora HP LaserJet 4 local em LPT1 a impressora ativa.
Application.ActivePrinter = ´HP LaserJet 4 local on LPT1:´
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.
GOSTEI 0