[Opgelost] Opslaan met naam uit cel naar PDF

Bespreek het rekenblad

[Opgelost] Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » ma maart 05, 2018 11:16 am

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 bijgewerkt door eremmel op zo maart 11, 2018 10:56 pm, in totaal 3 keer bewerkt.
Reden: Groene vinkje en [Opgelost] toegevoegd
LibreOffice Versie: 5.4.2.2 (x64)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel

Berichtdoor RPG » ma maart 05, 2018 2:34 pm

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 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » do maart 08, 2018 11:06 am

Dank je, ik krijgt het niet werkend.... :crazy:
LibreOffice Versie: 5.4.2.2 (x64)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » do maart 08, 2018 11:24 am

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

Romke
LibreOffice 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » do maart 08, 2018 11:40 am

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)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » do maart 08, 2018 12:01 pm

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) 39 keer gedownload
LibreOffice 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » do maart 08, 2018 12:16 pm

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)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » do maart 08, 2018 12:19 pm

Zoek op het Engelse forum voor Activesheet

Romke
LibreOffice 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » do maart 08, 2018 1:48 pm

zoek op
thiscomponent activesheet

lees
Verwijder de inhoud van bereiken uit een werkblad

Romke
LibreOffice 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » do maart 08, 2018 6:36 pm

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)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » do maart 08, 2018 9:13 pm

LibreOffice 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » do maart 08, 2018 11:12 pm

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)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor eremmel » vr maart 09, 2018 12:13 am

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
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
eremmel
 
Berichten: 627
Geregistreerd: di sep 01, 2009 10:11 am
Woonplaats: Barneveld, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor dirkinductie » vr maart 09, 2018 11:08 pm

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)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am

Re: Opslaan met naam uit cel naar PDF

Berichtdoor RPG » za maart 10, 2018 12:06 pm

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 6.2.5.2 op openSUSE Leap 15.1
RPG
 
Berichten: 3983
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: Opslaan met naam uit cel naar PDF

Berichtdoor eremmel » zo maart 11, 2018 4:51 pm

Code: Selecteer alles   UitklappenInklappen
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
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
eremmel
 
Berichten: 627
Geregistreerd: di sep 01, 2009 10:11 am
Woonplaats: Barneveld, Nederland

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

Berichtdoor dirkinductie » di maart 13, 2018 6:58 pm

Bedankt.
Die functie, is dat met bril als symbool?
LibreOffice Versie: 5.4.2.2 (x64)
dirkinductie
 
Berichten: 16
Geregistreerd: ma maart 05, 2018 11:05 am


Keer terug naar Calc

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 2 gasten