Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
cancel
Showing results for 
Search instead for 
Did you mean: 
nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP

Exportando para PDF (Macro)

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

Labels (1)
  • Macro

57 Replies
nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP
Author

Rodrigo, primeiro você precisa ter o PDFCreator instalado em seu computador.

Não esqueça também de alterar a parte de segurança da macro

Módulo de Segurança Requerido: Altere o valor para "Acesso ao sistema"

Segurança Local Atual: Altere o valor para "Permitir Acesso ao sistema"

Not applicable

Yuri, fiz os procedimentos certinho, tenho PDFCreator instalado, abri a segurança da macro e agora gerou outro erro destacado na imagem abaixo...

imagem07_duvida.JPG.jpg

nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP
Author

Rodrigo, esses erros estão me ajudando a melhorar o post, muito obrigado !

Você deve trocar o ReportID pelo ID do relatório que deseja imprimir. Coloque o valor entre aspas

Por exemplo: Você criou o relatório RP01, desta forma essa linha deve ficar.

ActiveDocument.PrintReport "RP01", "PDFCreator"

Not applicable

Yuri, meu relatório no momento está vazio. Funcionou o código, mas depois que peço para testar ele abre a caixa de diálogo normalmente, dizendo que o relatório está vazio e depois trava o programa...

dai tenho que fechar para continuar mexendo no mesmo

Not applicable

começou a funcionar, mas preciso aprender mais de relatórios em outros posts!!

para eu colocar a macro feita, preciso criar um objeto na dash?

nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP
Author

Não entendi sua dúvida Rodrigo

Not applicable

eu criei um modulo certo? Este módulo é uma macro certo? como eu coloco ela para funcionar dentro do meu dash...ou seja, seria um botão do tipo (clique aqui para gerar um PDF)?

nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP
Author

Ok, você pode, por exemplo, criar um botão com uma ação para chamar a sua macro.

Ao criar o botão, vá na aba Ações, selecione a ação Executar Macro (Externo -> Executar Macro) e coloque o nome do módulo que você criou na ação.

Not applicable

yuri, posso te enviar o arquivo para vc analisar pq não gera?

nicolett_yuri
Partner Ambassador/MVP
Partner Ambassador/MVP
Author