Bestandsnaam plakken d.m.v. Macro

Bespreek het rekenblad
vlietje
Berichten: 16
Lid geworden op: do jun 07, 2018 11:55 am

Bestandsnaam plakken d.m.v. Macro

Bericht door vlietje »

Beste mensen

In een werkblad wil ik een PDF van een werkblad maken d.m.v. Macro. Dat lukt, alleen de bestandsnaam moet de naam krijgen van een korte tekst in een cel. Die tekst in de cel wisselt elke keer als ik een PDF ga maken. Als ik dan de cel kopieer en dan exporteer als pdf dan krijgt de nieuwe PDF bestand elke keer de zelfde naam. Ga ik in de code kijken staat gewoon de tekst waar ik de macro heb opgenomen. Ik wik dat daar in plaats een plak opdracht voor gegeven wordt.

Hierbij een gedeelte van de code:

Code: Selecteer alles

dim args11(2) as new com.sun.star.beans.PropertyValue
args11(0).Name = "URL"
args11(0).Value = "google-drive://studiodeveenhoeve@gmail.com/2018-06-11-pietjepuk.pdf"
args11(1).Name = "FilterName"
args11(1).Value = "calc_pdf_Export"
args11(2).Name = "FilterData"
OpenOffice 3.1 op Windows 10
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Bestandsnaam plakken d.m.v. Macro

Bericht door eremmel »

Je hebt helaas dit topic niet kunnen vinden: Opslaan met naam uit cel naar PDF, maar nu wel :-)

Maar ik weet niet of je direct naar een device als google-drive://... kunt opslaan.
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
vlietje
Berichten: 16
Lid geworden op: do jun 07, 2018 11:55 am

Re: Bestandsnaam plakken d.m.v. Macro

Bericht door vlietje »

Het is bijna gelukt!
Alle bladen worden geëxporteerd naar PDF ik wilde alleen het eerste blad geëxporteerd hebben.

Hierbij de Code:

Code: Selecteer alles

Sub PDF
rem define variables
 dim oDoc as object
 dim Sheets as object 
 dim Sheet as object
 dim Cell as object
 
 dim document   as object
 dim dispatcher as object 
 
 dim url_of_ods_document as String  	' the URL of this document
 dim doc_path as String					' the URL of this document without the full filename
 
 dim pdf_url as String					' the URL of pdf document
 dim FileName as String 				' the PDF filename from a cell
 dim FileNameWithExtension as String 	' the full filename of PDF document

 dim i as integer
 dim len_url as integer 				' the length of URL
 dim sep_char_pos as integer 			' position of the next "/" separator of URL
 dim last_sep_pos as integer 			' position of the last "/" separator of URL
 

rem ----------------------------------------------------------------------


rem get access to the document
 document   = ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SetDocumentProperties", "", 0, Array())



'Get pdf filename and combine with URL of this document

oDoc = ThisComponent
Sheets = oDoc.Sheets
Sheet = Sheets.getByName("Overzicht_Facturen")  'change this to your sheet name
Cell = Sheet.getCellRangeByName("G1")  'change this to the cell that has the file name
FileName = Cell.String
FileNameWithExtension = Filename + ".pdf"


url_of_ods_document =(ThisComponent.getURL())
len_url = len(url_of_ods_document)
i=1

Back:
	sep_char_pos = InStr(i, url_of_ods_document, "/", 1) 'maybe better solution to use a "do" cycle, not "goto"
	if (sep_char_pos <> 0) then
		i=sep_char_pos+1
	 	goto Back 
	else 
		last_sep_pos = i-1
	end if
	 
doc_path = left(url_of_ods_document, last_sep_pos)
pdf_url = doc_path + FileNameWithExtension




'Set print area

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "Nr"
args11(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "PagebreakMode"
args12(0).Value = true

dispatcher.executeDispatch(document, ".uno:PagebreakMode", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$Factuur.C2:I54"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())




'Export to pdf

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = pdf_url 'This is equals to path and needed filename with "pdf" extension; but it is in URL format 
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(_
Array("UseLosslessCompression",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("DocumentOpenPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("PermissionPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args2())



'back to normal view

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "NormalViewMode"
args16(0).Value = true

dispatcher.executeDispatch(document, ".uno:NormalViewMode", "", 0, args16())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "Nr"
args17(0).Value = 3

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args17())



End Sub
OpenOffice 3.1 op Windows 10
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Bestandsnaam plakken d.m.v. Macro

Bericht door RPG »

Meestal zal een gekopieerde macro niet werken. Wat de oorzaak in dit geval is weet ik niet en wil ik ook niet weten.

Wanneer iemand iets wil printen of een pdf wil maken doet men er goed aan goede kennis te hebben van het begrip printbereik. Dit printbereik moet automatisch aangepast worden aan de te printen gegevens. Ik gebruik hier voor soms een combinatie van een gedefinieerd bereik en database bereik. Het is dan wel zo dat alle andere printbereiken die er soms standaard zijn, verwijderd moeten worden voor elk werkblad.

Het printbereik wat ik definieer bevat een deel van het adres en andere gegevens maar het is groter want ook het databasebereik zit er in opgesloten.

Waarom doe ik dat?
Wanneer ik dat allemaal goed gedefinieerd heb dan hoop ik dat er nooit meer na gekeken hoeft te worden en alleen het gewenste geprint wordt. Dit heeft niet alleen voordelen in de normale van werken maar macro's die geschreven worden zijn vaak ook een stuk eenvoudiger want die houden er ook rekening mee.

Wat maakt het ook duidelijk. Wanneer je iets wilt doen met OOo is er een gedegen kennis nodig van de normale werking. De begrippen worden in de helpfile kort beschreven.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie