Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Fala galera!
Tempos atrás me perguntaram como posso automatizar a exportação de relatórios para PDF através de Macros. Confesso que há muito tempo venho fugindo desse assunto, porém estou trabalhando em um projeto e uma das atividades é essa! Acabou a fuga rsrs.
Vamos lá.
Em primeiro lugar, a fonte de informação deverá ser um Report (Relatório) do QlikView, tendo este relatório pronto podemos prosseguir com a macro.
A biblioteca que estou utilizando para exportação é PDFCreator 1.7.3, pois esta é uma ferramenta gratuita e na exportação não houver perda na qualidade de imagem (pelo menos no meu caso). http://www.pdfforge.org/pdfcreator/download.
Bom, vamos ao código em VBScript. Cada linha de execução possui um comentário/explicação em verde e negrito.
sub PDF
'Criando instância do PDFCreator
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
'Variáveis de configuração da biblioteca PDFCreator
With pdfjob
'Verificações da fila da impressora
If .cStart("/NoProcessingAtStartup") = False Then
If .cStart("/NoProcessingAtStartup", True) = False Then
'Caso não tenha nenhum objeto na fila de impressão, termina a macro.
Exit Sub
End if
'Caso tenha objeto na fila de impressão, torne a impressão visível
.cVisible = True
End If
.cOption("UseAutosave") = 1 'Permitir o Autosave
.cOption("UseAutosaveDirectory") = 1 'Permitir que grave no diretório
.cOption("AutosaveDirectory") = Path 'Caminho que será gravado o relatório
.cOption("AutosaveFilename") = ReportName 'Nome que será gravado o relatório
.cOption("AutosaveFormat") = 0 'Formato PDF
.cClearCache
'Finalizando as configurações da biblioteca PDFCreator
End With
'Imprime o relatório
ActiveDocument.PrintReport ReportID, "PDFCreator"
'Aguarde até que o processo entre na fila de impressão
Do Until pdfjob.cCountOfPrintjobs = 1
ActiveDocument.GetApplication.Sleep 20
Loop
pdfjob.cPrinterStop = False
'Aguarda até que a fila de impressão esteja vazia
Do Until pdfjob.cCountOfPrintjobs = 0
ActiveDocument.GetApplication.Sleep 20
Loop
'Termina o processo
pdfjob.cClose
'Zerando a variável
Set pdfjob = Nothing
end sub
Praticamente essa é a forma de chamar a biblioteca do PDFCreator. Agora basta criar uma sub para chamar essa macro e então utiliza-la.
Para facilitar o entendimento, estou anexando uma aplicação de exemplo.
Observação: Fiz o teste de execução através do QlikView Client e também acesso web (IE.Plugin) e ambos funcionaram conforme o determinado.
Qualquer dúvida por favor comentem!
Abraços
Marcelo,
Mesmo deixando fixo na linha, ele imprime,mas não salva .
Talvez estejamos falando de coisas diferentes. Eu uso o PDFCreator então a impressão gera o arquivo pdf na pasta informada. Em nenhum momento aparece opção para salvar o arquivo. Os pdfs vão sendo gerados diretamente na pasta.
Pessoal, instalei a versão 1.7.3 testei no meu computador e funcionou blz. Qdo fui subir para o servidor que vai rodar a aplicação, que não é o server do qlik. Ele fica travado em "Executando a macro". É o qvw do exemplo, alterei apenas a variável PathArquivos para um diretório do servidor. As permissões da macro estão setadas como "Acesso ao sistema".
Boa tarde.... o meu para na linha 37.... alguem pod me ajudar...
cOption("AutosaveFormat") = 0
Marcelo,
No meu caso funcionou direitinho.
Você tem a mesma versão instalada no servidor, não existe outro instalado além do PDFCreator ?
Atenciosamente,
Marcelo, tem que ir debugando a macro para entender em qual ponto esta o problema. Adicione msgbox em determinados pontos do script para entender em qual momento o processo esta parando
Pode ser erro de permissão no diretório
Uma sugestão:
Na macro fazer um teste para ver se a maquina tem o pdfCreator instalado, se não tiver apresentar o link para instalar.