Macro para salvar e abrir em PDF

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: Export or Save As PDF in LibreOffice Calc Sheets using Macro E
Export or Save As PDF A Specific Range in LibreOffice Calc Sheets using Macro

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

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)?

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.

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
1 Like

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

Tenho uma macro que salva em PDF com destino, nome e páginas variáveis.

Se por exemplo eu colocar em uma célula A1 o caminho do arquivo já especificado (ex.: A1 = “C:\Users\ Cliente \Desktop\aaaa\ 1099-2019.pdf”), como faço para colocar esse URL da célula A1 no lugar de sArquivo = “”“C:\Users\Nome_do_Usuario\Documents\Teste Novo.txt”"" ? Como fica a sintaxe? Tentei colocar a célula A1 como objeto e inserir, por exemplo, caminhoARQUIVO.String com ou sem ConvertToURL e nada. Só da certo se copiar o URL da célula A1 e inserir nessa macro manualmente, porém, como o destino e nome são variáveis, para mim se torna inviável.

Se for possível, seria de grande ajuda. Evitaria ter que toda vez que salvar em PDF ter que ir lá procurar o arquivo.

ATUALIZAÇÃO

Consegui. era só colocar sem nenhuma aspas caminhoARQUIVO.String.
Obrigado pela macro de abrir arquivo. Vai me ajudar demais!
vlwww

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

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.

Ok. Vou me aprofundar no assunto.

vlw!

:slight_smile: