CALC: Macro automatisch opslaan met waarde uit cel

josoetgebrook
Berichten: 3
Lid geworden op: wo dec 09, 2009 10:09 am

CALC: Macro automatisch opslaan met waarde uit cel

Bericht door josoetgebrook »

Ik heb een macro gemaakt waarmee ik een bereik selecteer en vervolgens dit bereik kan exporteren als pdf.
Bij het Exporteren naar PDF kies ik dan voor Selectie en klik op OK. Daarna moet ik een bestandsnaam invoeren.
Vervolgens ga ik de macro bewerken en staat er de onderstaande code.

Ik heb hierover 2 vragen:
Vraag 1:
De volgende regel moet worden aangepast, zodat het bestand wordt opgeslagen met de waarde in van cel G11 op tabblad 3:
args2(0).Value = "file:///K:/map_waarin_het_pdf-bestand_wordt_opgeslagen/exportpdf_test.pdf"
waarin moet het gedeelte achter Value worden gewijzigd?

Vraag 2:
Is er ook een mogelijkheid om hier een toetscombinatie aan te koppelen?

Code: Selecteer alles

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$50"

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

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = "file:///K:/map_waarin_het_pdf-bestand_wordt_opgeslagen/exportpdf_test.pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(Array("UseLosslessCompression",0,false,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("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

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


end sub
Openoffice 3.2 op Windows XP
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: CALC: Macro automatisch opslaan met waarde uit cel

Bericht door RPG »

Hallo

Volgens mij moet je het met alle aan wijzingen nu in staat zijn om het naar eigen wensen te kunnen aan passen. Ik denk niet dat je het met een sneltoets kunt oproepen.
Dan wordt het nog iets in gewikkelder.
Deze macro moet in het document bewaard worden. Als je het buiten het document wilt bewaren dan moet er ook nog wat veranderd worden.

Romke


Code: Selecteer alles

REM  *****  BASIC  *****
'Het is een goede gewoonte om te zorgen dat alle variabelen gedefinieerde moeten worden
' Option explicit dwingt je hier toe.
option explicit 
' Dit is een combinatie van twee macro's
' Een zelf gemaakt deel en een recorded deel

Sub Main
dim oDocument,oSheets,oSheet
dim oCell
   oDocument = ThisComponent ' Dit is voor het document waar deze macro instaat.
   oSheets = oDocument.Sheets ' Dit gaat naar de bladen die in dit document zijn.
' Bladen kunnen op verschillende manieren benaderd worden 
' a) met een index nummer dat begint te tellen met nul
' b) met de naam die onder in het scherm staat als blad
'   oSheet = oSheets.getByIndex(0)     ' Het eerste blad
   oSheet = oSheets.getbyName("Sheet1")     ' Het eerste blad maar nu op naam
   oCell = oSheet.getCellByPosition(1,1)   ' Pak cel B2




rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem Selectie van het deel wat bewaard moetblijven
rem Aan geven welk deel
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$50"

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

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
'args2(0).Value = "file:///K:/map_waarin_het_pdf-bestand_wordt_opgeslagen/exportpdf_test.pdf"
args2(0).Value = oCell.getstring ' Hier wordt de naam in gebracht
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(Array("UseLosslessCompression",0,false,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("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

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

end sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
josoetgebrook
Berichten: 3
Lid geworden op: wo dec 09, 2009 10:09 am

Re: CALC: Macro automatisch opslaan met waarde uit cel

Bericht door josoetgebrook »

Hiermee is het inderdaad gelukt.

Ik ben nu weer een paar maanden verder en gebruik dit bestand op een usb-stick.
Deze usb-stick krijgt niet altijd dezelfde schijfletter, waardoor ik de macro steeds moet aanpassen als ik niet aan mijn eigen computer werk.

Zelf dacht ik aan deze oplossing:
omdat de geexporteerde pdf bestanden in een map moet worden opgeslagen die vanaf het werkbestand gezien staat de map /facturen/2010

Code: Selecteer alles

dim args2(2) as new com.sun.star.beans.PropertyValue
  Dim Cel        As Object
  Dim Werkblad    As Object
  Dim Werkmap    As Object
  Dim Path    As Object
  Werkmap=ThisComponent
  Werkblad=Werkmap.Sheets.getByName("Factuur")
  Cel=Werkblad.getCellByposition(6,10) 'G11

args2(0).Name = "URL"
args2(0).Value = "File:///facturen/2010/"& Cel.getString()&".pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
of
zodat er werd gekeken vanaf de root van de schijf waarin het werkbestand staat.

Code: Selecteer alles

dim args2(2) as new com.sun.star.beans.PropertyValue
  Dim Cel        As Object
  Dim Werkblad    As Object
  Dim Werkmap    As Object
  Dim Path    As Object
  Werkmap=ThisComponent
  Werkblad=Werkmap.Sheets.getByName("Factuur")
  Cel=Werkblad.getCellByposition(6,10) 'G11

args2(0).Name = "URL"
args2(0).Value = "File://../map waarin het werkbestand staat/facturen/2010/"& Cel.getString()&".pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
Maar beide werken niet.
Openoffice 3.2 op Windows XP
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: CALC: Macro automatisch opslaan met waarde uit cel

Bericht door RPG »

Hallo

Ik weet niet of ik je in korte tijd een oplossing aan de hand kan doen. Maar misschien komen we er in enkle stappen.
Eerst de letter van de USB stick. Ik neem aan dat de letter van de USB stick zit in de url van de file naam.

Je wilt delen hebben van de oorspronkelijke naam Ik weet niet precies wat je wilt maar ik hoop dat ik in de code voldoende informatie gegeven heb zodat je zelf de gewenste naam kunt maken.

In macros die standaard in OpenOffice.org zijn kun je er delen uithalen.
Deze macro's bevinden zich in :OpenOffice.org macros en dan in de library tools. Daar deze macros niet standaard geladen zijn moet er getest worden of ze geladen zijn en zonodig moet laden.

Daarna wordt het gebruik om de nieuwe file naam te maken zoals ik denk dat je het gebruikt. Controleer dat even

Als je een uitkomst heb dan moet het op de goede plaats neergezet worden daarna kun je het bestand opslaan.
Ik hoop dat je eruit komt

Romke

Code: Selecteer alles

REM  *****  BASIC  *****

Sub Main
dim completefilenaaam, Nieuwenaam
completefilenaaam=thiscomponent.url 
'print completefilenaaam
if not globalscope.BasicLibraries.islibraryloaded("Tools") then 
	' Laad nu de library
	globalscope.BasicLibraries.loadlibrary("Tools")
end if
select case GetGUIType
	case 1 : Separator="\" 'Windows
	case 4 : Separator="/" 'Unix
	case else print "onbekend"
end select

'Nieuwenaam= 
print tools.DirectoryNameOutOfPath(completefilenaaam,Separator) & "/facturen/2010" & Separator & tools.GetFileNameWithoutExtension(completefilenaaam,Separator) & ".pdf"
End Sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
josoetgebrook
Berichten: 3
Lid geworden op: wo dec 09, 2009 10:09 am

Re: CALC: Macro automatisch opslaan met waarde uit cel

Bericht door josoetgebrook »

Bedankt.

Met de code die je gaf heb ik het volgende ervan kunnen maken:

Code: Selecteer alles

dim args2(2) as new com.sun.star.beans.PropertyValue
  Dim Cel        As Object
  Dim Werkblad    As Object
  Dim Werkmap    As Object
  Dim Path    As Object
  
  Werkmap=ThisComponent
  Werkblad=Werkmap.Sheets.getByName("Factuur")
  Cel=Werkblad.getCellByposition(6,10) 'G11


dim completefilenaam, Nieuwenaam
completefilenaam=thiscomponent.url
'print completefilenaam
if not globalscope.BasicLibraries.islibraryloaded("Tools") then
   ' Laad nu de library
   globalscope.BasicLibraries.loadlibrary("Tools")
end if
select case GetGUIType
   case 1 : Separator="/" 'Windows
   case 4 : Separator="/" 'Unix
   case else print "onbekend"
end select



args2(0).Name = "URL"
args2(0).Value = tools.DirectoryNameOutOfPath(completefilenaam,Separator) & "/facturen/2010" & Separator & Cel.getString()& ".pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array
Openoffice 3.2 op Windows XP
Plaats reactie