Pergunte aqui
0

Macro para salvar e abrir em PDF

perguntadas 2016-05-10 03:59:37 +0200

imagem do gravatar de Orlando

updated 2016-05-15 03:05:24 +0200

Olá, pessoal!

Pesquisei, digitando PDF na busca aqui e não obtive o resultado esperado.

Encontrei na internet a macro abaixo que funciona para exportar ou salvar como PDF planilha/conteúdo no Calc:

Sub ExportToPDF()
   dim document as object
   dim dispatcher as object

   document = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   ' change the path below as per your needs
   path ="file:///home/arindam/sheet1.pdf"
   Open path For Append As #1
   Close #1

   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "URL"
   args1(0).Value = "file:///home/arindam/sheet1.pdf"  ' change the path below as per your needs

   dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub

FONTES: http://www.debugpoint.com/2014/10/exp... E http://www.debugpoint.com/2015/08/exp...

Mas não estou conseguindo adaptar o comando correspondente para salvar uma planilha naquele formato na pasta “Documents”, do sistema Windows.

Se possível, gostaria também de acrescentar um comando na macro para abrir o mesmo arquivo salvo em PDF.

Segue uma planilha-modelo: Macro para pdf

Grato pela atenção!

Orlando Souza

8)

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Onde vc não está conseguindo adaptar especificamente... o comando ou algum argumento? E mais, vc quer "abrir" o pdf em um visualizador do Window$ ou no próprio Libreoffice (Draw)?

imagem do gravatar de GrafenoGrafeno ( 2016-05-10 18:30:47 +0200 )editar

Oi! Não estou conseguindo configurar o path ="file...", "dim args1(0) as ..." e os args1(0).Name = "URL" e args1(0).Value = "file:.." para salvar na pasta Documents, do Windows. Na verdade, não entendi bem sobre esses itens naqueles tutoriais.

Quanto ao pdf, que fosse possível abrir em qualquer pc com Windows o arquivo salvo com extensão ".pdf", usando a mesma macro.

imagem do gravatar de OrlandoOrlando ( 2016-05-10 18:52:15 +0200 )editar

2 Respostas

0

respondidas 2016-05-15 03:29:18 +0200

imagem do gravatar de Orlando

updated 2016-05-15 04:32:51 +0200

A macro abaixo também salva e abre em PDF:

Sub SalvaAbrePDF
Dim Args(1) as New com.sun.star.beans.PropertyValue
Dim FilterProps(0) as New com.sun.star.beans.PropertyValue

FilterProps(0).Name = "PageRange"
FilterProps(0).Value = "1-2"

Args(0).Name = "FilterName"
Args(0).Value = "calc_pdf_Export"
Args(1).Name = "FilterData"
Args(1).Value = FilterProps

    FileLoc = "c:\users\UsuarioA\Documents\Plan1.pdf" 'Altere isso para o usuário desejado
    FileURL = convertToURL(FileLoc)
    ThisComponent.StoreToURL(FileURL, Args)

    'AbrirArquivoPDF
    sPrograma = ConvertToURL("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe") 'Altere isso para a localização do executável
    sArquivo =  """c:\users\UsuarioA\Documents\Plan1.pdf""" 'Altere isso para o mesmo conteúdo sem aspas no comando "FileLoc"

    Shell(sPrograma,1,sArquivo)

End Sub

Mas quando acrescento a instrução: If... Then... Else, não salva a Plan1. Aparecendo a mensagem de erro do Acrobat Reader: "Ocorreu um erro ao abrir este documento. Este arquivo não pôde ser encontrado.", após eu pedir para executar a macro abaixo:

Sub SalvaAbrePDF
Dim Args(1) as New com.sun.star.beans.PropertyValue
Dim FilterProps(0) as New com.sun.star.beans.PropertyValue

FilterProps(0).Name = "PageRange"
FilterProps(0).Value = "1-2"

Args(0).Name = "FilterName"
Args(0).Value = "calc_pdf_Export"
Args(1).Name = "FilterData"
Args(1).Value = FilterProps

    If FileLoc = "c:\users\UsuarioA\Documents\Plan1.pdf" Then 'Altere isso para o usuário "A" desejado
        FileURL = convertToURL(FileLoc)
        ThisComponent.StoreToURL(FileURL, Args)

    ElseIf FileLoc = "c:\users\UsuarioB\Documents\Plan1.pdf" Then *'Altere isso para o usuário "B" desejado
        FileURL = convertToURL(FileLoc)
        ThisComponent.StoreToURL(FileURL, Args)
    End If

    'AbrirArquivoPDF
    sPrograma = ConvertToURL("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe") 'Altere isso para a localização do executável
    sArquivo =  """c:\users\Usuario\Documents\Plan1.pdf""" 'Altere isso para o mesmo conteúdo sem aspas no comando "FileLoc"

    Shell(sPrograma,1,sArquivo)

End Sub
editar assinalar como ofensivo Excluir Link mais

Comentários

Vejo um problema ao olhar seu código: a variável FileLoc não foi definida antes do bloco If...Then..Else.... Consequentemente não é aprovada em nenhum dos testes por estar vazia. E assim fornece um caminho em branco para o método StoreToURL.

imagem do gravatar de GrafenoGrafeno ( 2016-05-16 21:32:46 +0200 )editar

Ok. Vou me aprofundar no assunto.

vlw!

:)

imagem do gravatar de OrlandoOrlando ( 2016-10-19 03:35:23 +0200 )editar
2

respondidas 2016-05-10 19:42:12 +0200

imagem do gravatar de Grafeno

Então,


Ao invés das linhas path ="file:///home/arindam/sheet1.pdf" e args1(0).Value = "file:///home/arindam/sheet1.pdf" prefira usar:

path = ConvertToURL("C:\Users\Nome_do_Usuario\Documents\Nome_do_arquivo.pdf")

e

args1(0).Value = ConvertToURL("C:\Users\Nome_do_Usuario\Documents\Nome_do_arquivo.pdf")


A função ConverToURL() irá converter o caminho e o nome do arquivo em uma URL válida para o Libreoffice.


Para abrir um arquivo com uma aplicação externa existe o comando Shell(). Dê uma olhada no exemplo:

Sub AbrirArquivonoNotepad
    sPrograma = ConvertToURL("C:\Windows\System32\Notepad.exe")
    sArquivo =  """C:\Users\Nome_do_Usuario\Documents\Teste Novo.txt"""

    Shell(sPrograma,1,sArquivo)
End Sub
editar assinalar como ofensivo Excluir Link mais

Comentários

Muito bom!

Pena que a macro não reconhece automaticamente o usuário da sessão iniciada com o Windows. Sendo necessário reconfigurar sempre que mudar de PC.

[ ]'s

imagem do gravatar de OrlandoOrlando ( 2016-05-11 01:47:27 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2016-05-10 03:59:37 +0200

Lidas: 569 vezes

Última atualização: May 15 '16