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
Que bom! ![]()
Yuri,
Com essa macro, é possível utilizar o section access?
Por exemplo: Quero gerar os relatórios em PDF de acordo com as restrições que um usuário tem.
Tentei procurar em outros lugares sobre esse detalhe, mas ainda não consegui encontrar se é possível ou não.
Gustavo, o section access funciona independente da macro, porém neste caso eu acho que o section access não é a melhor maneira de fazer isso.
O Section Access filtra os dados de acordo com o usuário que acessa a aplicação.
Para seu caso dar certo, você vai ter que fazer uma rotina para filtrar os dados que deseja para cada usuário, mas isso de acordo com um filtro em determinado (ou em vários) campos.
Testado e funcionado !!
valeu a dica!!!, show!
Olá Yuri!! Sua dica foi valiosa e já estou com a exportação funcionando à milhão. Tenho outra dúvida. Eu estou trabalhando com diversos projetos e a exportação de todos os selecionados ocorre dentro de apenas um arquivo PDF. Esse processo está perfeito. Meu problema é que agora surgiu a necessidade de eu criar um PDF para cada projeto selecionado. O nome do arquivo deve ser composto da data selecionada + Id_projeto. Pode me dar mais alguma dica pra ajudar?
Abraços e obrigado!!!
nicolett.yuri, Bom dia !
Em qual momento ele salva no local indicado ?
No momento que você imprime ?
Ou no botão que executa a macro ?
Obrigado
Olá Luiz! Tentando não atravessar o Yuri .... no meu caso a macro salva no momento da impressão. Quer seja apenas um registro ou em lote. O caminho do arquivo já fica setado na própria macro.
Abçs!!
Marcelo, Bom dia !
Obrigado pela resposta!
Porém no meu caso eu executo o exemplo e não salva no local informado na variável.
Eu já alterei a variável de ambiente para o local da minha máquina.
Porém não salva.
Então, eu tive problemas na época com a variável tbém e optei por passar o parâmetro diretamente na linha de comando.
Ex:
.cOption("AutosaveDirectory") = "C:\Exporter" 'Caminho que será gravado o relatório