[Opgelost] Opslaan met naam uit cel naar PDF

Bespreek het rekenblad
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

[Opgelost] Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Wie kan mij helpen?

Ik heb een libre calc bestand met veel tabbladen. Elk tabblad is een factuur, een factuur wordt op bepaald moment afgedrukt en opgeslagen als .pdf

Naam van bestand moet worden:
klantnaam (Cel J1) en ordernummer (Cel J2),
bijvoorbeeld: 9001_52185.pdf
Doordat het tabblad ook het klantnummer heeft, is het gelukt.
Maar hoe verwijst ik naar de cellen op het actieve (geopende) tabblad?
Ben al verschillende avonden bezig, maar lukt niet. :(

ThisComponent.Sheets (3) verwijst nu naar het verkeerde blad, niet de actieve.
Macro moet geschikt zijn voor alle bladen.


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

'Naam van active tabblad ophalen, daarna nummer van Cel J2 ophalen, maar hoe ?
fileName = _ & ThisComponent.getCurrentController.getActiveSheet.Name & "_" & ThisComponent.Sheets (3). getCellRangebyName ("J2").String & ".pdf"

document = ThisComponent.CurrentController. Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Facturen/" & fileName ' change the path below as per your needs

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub
Laatst gewijzigd door eremmel op zo mar 11, 2018 10:56 pm, 3 keer totaal gewijzigd.
Reden: Groene vinkje en [Opgelost] toegevoegd
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel

Bericht door RPG »

Ik zou eens op het Engelse forum gaan zoeken hoe je dit moet aanpakken. Ik heb weinig idee hoe je dat moet doen.
Als ik zoek op het Engelse forum naar invoice en export krijg ik veel treffers. Misschien helpt het ook als je zoekt naar invoice en exporttopdf. Wanneer je je gaat kijken op het Engelse lees je gelijk ook hoe andere mensen problemen aan pakken. Misschien kun je macro's vermijden.
Hieronder doe ik enkele links:
[Solved] Macro to "Export as PDF" not completing that task (View topic) • Apache OpenOffice Community Forum
[Solved] Export to PDF macro automatic file name (View topic) • Apache OpenOffice Community Forum

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Dank je, ik krijgt het niet werkend.... :crazy:
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

dirkinductie schreef:Dank je, ik krijgt het niet werkend.... :crazy:
Je bent iemand met weinig woorden.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Sorry,
Ik kan niets vinden. Zover ik het begrijp verwijst het altijd naar hetzelfde blad.
In mijn geval is dat altijd verschillend, maar altijd het blad wat ik op dat moment geopend heb.
Ook al geprobeerd via apart tabblad te doen en de cellen naar daar te kopiëren. Het tabblad is dan wel altijd hetzelfde,
maar dan moet er altijd naar een andere cel verwezen worden. Werkt ook niet dus...

ThisComponent.Sheets (3). getCellRangebyName ("J2").String

Als ik (3) kon veranderen naar: (ActiveSheet) , maar dat werkt niet....
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

Ik heb het idee dat je toch moet aanpassen aan het geen geboden wordt. Ik denk niet dat veel mensen gratis jouw computer programma gaan ontwikkelen. In principe is dat de vraag wat je ook vertelt.

Teveel vragen gaan over opmaat gemaakte producten.

Verzamel je gegevens
Verplaats je gegevens naar een blad waarin je alles wilt zien. In dat blad kun je dan met eenvoudige middelen nog gegevens uit andere tabellen halen.

Adressenlijst met gegevens op andere bladen (Toon onderwerp) • OpenOffice.orgIn de link staat een voorbeeld hoe ik het zou uit werken maar nog zonder het naar een PDF sturen.

Bij gevoegd heb ik een soort gelijk voorbeeld. Maar dat gaat er ook vanuit dat alle gegevens voor de factuur naar een bepaald blad gaan. Hoe ze daar komen is soms minder belangrijk. Het gaat uit van een scheiding van gegevens en het eindresultaat.

Romke
Bijlagen
exportpdf06.ods
Ik heb het idee dat er nu bijna alles in staat.
(31.47 KiB) 201 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Het enige waar ik op vast loop nu is, hoe maak ik de bestandsnaam met gegevens uit 2 cellen van het actieve tabblad.
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

Zoek op het Engelse forum voor Activesheet

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

zoek op
thiscomponent activesheet

lees
Verwijder de inhoud van bereiken uit een werkblad

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Dank.
Mijn Engels is niet best...
Wat ik ook probeer, ik krijg het (sinds dagen) nog niet werkend. :?
Had ik nog maar Excel.....
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

LibreOffice 7.4.3.2 op openSUSE Leap 15.4
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Dank voor de link.
Keer op keer zijn het verwijzingen naar hetzelfde blad.
De bedoeling is de bestandsnaam samen te stellen uit, op dat moment, actieve (1 van 60) tabblad, uit cel J1 en cel J2.
In mijn geval is de tabblad-naam elke keer anders.
Om voor elk blad een macro te maken, vind ik een beetje te gek worden.
Gr. Dirk
LibreOffice Versie: 5.4.2.2 (x64)
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door eremmel »

Dirk,

De links die Romke naar je stuurt bevatten (bijna) alle informatie die je nodig hebt.
Je moet jezelf wel de tijd gunnen om macro's te leren programmeren. Je zult dus moeten studeren. Een goed stuk macro controleert bv op verkeerde invoer etc.
Als je Engels niet al te goed is kun je een eind komen om stukken tekst in translate.google.com te plaatsen.
Je kunt waarden van je macro afdrukken via een popup bericht zodat je kunt zien wat er in je macro gebeurt, of draaien in de debugger en de waarden van variabelen bekijken.
De Nederlandstalige link van Romke gaat over de actuele (geselecteerde) sheet (werkblad).
Kun je misschien aangeven wat er mis gaat en nogmaals je code laten zien, zodat we verdere aanwijzingen kunnen geven?

Groet, Erik
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Yes, hij werkt, bedankt!
:D

Staat er iets wat overbodig is?

Sub ExportToPDF()
dim document as object
dim dispatcher as object
dim fileName
dim Doc as object
dim Sheet as object
dim DebitNr as string
dim OrderNr as string
dim Cell1 as object
dim Cell2 as object

'Get the active document:
Doc = Thiscomponent

'Get the active sheet:
Sheet=Doc.getcurrentcontroller.activesheet

'Get a cell by position
Cell1=Sheet.getCellByPosition(9,0) 'These coordinates means: the cell J1
Cell2=Sheet.getCellByPosition(9,1) 'These coordinates means: the cell J2


'Get text from a cell:
DebitNr = Cell1.string
OrderNr = Cell2.string


'Naam van active tabblad ophalen, daarna nummer van Cel J2 ophalen, maar hoe ?
fileName = _ & DebitNr & "_" & OrderNr & ".pdf"

document = ThisComponent.CurrentController. Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Facturen/" & fileName ' change the path below as per your needs

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub
LibreOffice Versie: 5.4.2.2 (x64)
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door RPG »

Het is mooi dat je geslaagd bent. Het maken van macro's in OOo is buiten gewoon moeilijk. Een van de moeilijkheden is dat je wel in BASIC programmeert maar dat de code nauwelijks iets te maken heeft met BASIC. Het zijn bijna alleen API opdrachten. Een API die zeer ondoorgrondelijk is. Na een goede studie merk je dat de API heel kort ligt bij de normale werking van OOo. Dat is ook logisch zonder API geen OpenOffice.

Bij wat je ook doet in OpenOffice is het begrip krijgen van het geheel buiten gewoon belangrijk.
  • Thiscomponent staat voor het document waar je mee bezig bent.Het is het model
  • Currentcontroller gaat over dat document. Het vertegenwoordig dat wat de gebruiker ziet.
  • ActiveSheet staat voor het huidige werkblad.
Je ziet je gaat steeds dieper het document in: Van het model zo als opgeslagen, naar het geopende document zoals je ziet en als laatste stap naar het actuele werkblad.

Ik denk dat mensen hun eigen macro's moeten schrijven. Het is niet verstandig om allerhande macro's te gebruiken die je zelf niet begrijpt. Een uitzondering zijn zeer algemene macro's die goed te gebruiken zijn met enkele parameters. Anders gezegd: Beter een rommelige macro van je zelf die je begrijpt dan een rommelige macro van een ander die je niet begrijpt.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Opslaan met naam uit cel naar PDF

Bericht door eremmel »

Code: Selecteer alles

 1 Sub ExportToPDF()
 2 	dim document as object
 3	dim dispatcher as object
 4	dim fileName
 5	dim Doc as object
 6	dim Sheet as object
 7	dim DebitNr as string
 8	dim OrderNr as string
 9	dim Cell1 as object
10	dim Cell2 as object

12	'Get the active document:
13	Doc = Thiscomponent

	'Get the active sheet:
16	Sheet=Doc.getcurrentcontroller.activesheet

	'Get a cell by position
19	Cell1=Sheet.getCellByPosition(9,0) 'These coordinates means: the cell J1
20	Cell2=Sheet.getCellByPosition(9,1) 'These coordinates means: the cell J2


	'Get text from a cell:
24	DebitNr = Cell1.string
25	OrderNr = Cell2.string


	'Naam van active tabblad ophalen, daarna nummer van Cel J2 ophalen, maar hoe ?
29	fileName = _ & DebitNr & "_" & OrderNr & ".pdf"

31	document = ThisComponent.CurrentController. Frame
32	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

34	dim args1(0) as new com.sun.star.beans.PropertyValue
35	args1(0).Name = "URL"
36	args1(0).Value = "file:///C:/Facturen/" & fileName ' change the path below as per your needs

38	dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
39 End Sub
Mooi om te zien: de volhouder wint!
Even wat opmerkingen. De namen die je gekozen hebt voor de variabelen beginnen soms met en soms zonder hoofdletter en lijken (komen) overeen met properties van de interface. Het is beter om je variabelen te laten beginnen met 'my'. Dus iets als 'dim myDocument as object', dat maakt de code leesbaarder.
Je hebt veel tussen stapjes gemaakt. B.v. de regels 5, 13, 16. In zo'n eenvoudig geval zou ik gewoon overal 'ThisComponent' gebruiken (je bent ook niet consequent geweest, kijk maar naar regel 31). Dit geldt ook voor Cell1 en Cell2 (9,10, 19,20, 24, 25). De variabelen Cell1 en Cell2 zeggen niet zoveel. Maar de variabelen van 7 en 8 zijn juist wel weer zinvol.
Je gebruikt in regel 16 en regel 31 twee namen die erg op elkaar lijken: getCurrentController en CurrentController. Ik vermoed dat beide het zelfde opleveren; de een als functie en de andere als property.
Het opbouwen van de filename is nu verdeeld over 29 en 36. Dit is onduidelijk. Je zou dat beter allemaal in 29 kunnen plaatsen, maar nog beter is om het path van de facturen boven aan te plaatsen zodat bij een eventuele aanpassing je allen bovenaan in de functie iets hoeft aan te passen: ' Const myFactuurPath as String = "file:///C:/Facturen/" ' en regel 29 wordt dan: ' fileName = myFactuurPath & DebitNr & "_" & OrderNr & ".pdf" '

Tip:
Gebruik 'Option Explicit' om type fouten in variabelen te ondervangen.

Succes, Erik
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
dirkinductie
Berichten: 18
Lid geworden op: ma mar 05, 2018 11:05 am

Re: [Opgelost] Opslaan met naam uit cel naar PDF

Bericht door dirkinductie »

Bedankt.
Die functie, is dat met bril als symbool?
LibreOffice Versie: 5.4.2.2 (x64)
Plaats reactie