Opslaan als naam in tekstvak.

Bespreek de tekstverwerker

Opslaan als naam in tekstvak.

Berichtdoor Atwist » vr maart 18, 2016 9:39 am

Hallo

Probeer mijn standaard document een beetje te automatiseren zoals het "opslaan als"
Met Calc krijg ik het wel voor elkaar om een werkblad op te slaan als PDF met de naam van een cel.
Nu wilde ik dit ook met mijn Write documenten doen door middel van de tekst in een "tekstvak" maar dit krijg ik niet voor elkaar.
Snap namelijk niet hoe ik de naam van het tekstvak in de Macro moet zetten.

Code: Selecteer alles   UitklappenInklappen
args1(0).Value = "file:///media/documenten/Sjablonen/FAX-"&aan&"-"&datum&".pdf"


Heb dus een tekstvak met de naam "aan" en "datum".

Kan iemand mij de goede richting wijzen ????

Alvast bedankt.
Andreas

LibreOffice 4.4.7.2. op Linux Mint en zeker geen Versie 5 meer.
Atwist
 
Berichten: 52
Geregistreerd: ma sep 14, 2015 8:56 am

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » vr maart 18, 2016 11:51 am

Hallo

Ik denk dat je moet gaan zoeken naar "textfield" of "textfields" op het Engels forum. Ik heb geen idee hoe te werken met die service en bijbehorende interfaces.

Zoekactie
https://forum.openoffice.org/en/forum/s ... uthor=&fid[]=7&sc=1&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search

Voorbeeld van hoe iets gebruikt wordt. Het wordt niet gebruikt voor het geven van een filenaam.
https://forum.openoffice.org/en/forum/v ... textfields

https://forum.openoffice.org/en/forum/v ... 21&t=20046
Bovenstaande link kan ook wel eens veel belovend zijn maar dan moet je de draad tot het einde doorwerken. Ik heb het niet geprobeerd.

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

Re: Opslaan als naam in tekstvak.

Berichtdoor Atwist » vr maart 18, 2016 4:37 pm

Hallo Romke,

Inderdaad hier had ik zelf op moeten komen "textfield".
Ben al er al even mee aan het stoeien en het gaat de goede kant op.
Ik zal het resultaat hier posten.
Andreas

LibreOffice 4.4.7.2. op Linux Mint en zeker geen Versie 5 meer.
Atwist
 
Berichten: 52
Geregistreerd: ma sep 14, 2015 8:56 am

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » vr maart 18, 2016 5:04 pm

Hallo

Ik ben er van uit gegaan dat het geen databaseveld is. Het zou kunnen zijn dat een database veld nog anders werkt. Voor een zelf aan gemaakt veld lijkt mij het volgende te werken. Let niet op de namen.

Code: Selecteer alles   UitklappenInklappen
sub doen2
dim oDiepweg
oDiepweg=thiscomponent.DocumentProperties.getUserDefinedProperties
print oDiepweg.getPropertyValue("Aan")
print oDiepweg.Aan
end sub


De zelfde code is mogelijk ook voor een datum te gebruiken maar het kan zijn dat er niet een string maar een struc aangeleverd wordt. Een struc moet uit gepakt worden met in dit geval year, month, day.

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

Re: Opslaan als naam in tekstvak.

Berichtdoor Atwist » za maart 19, 2016 3:33 pm

Momenteel ben ik met dit stukje bezig maar krijg steeds de volgende melding.

"You may have illegal file name character."

Ik kan zo niet iets vinden wat er mis is.

Code: Selecteer alles   UitklappenInklappen
Sub Savetopdf
On error goto EH
oDoc = ThisComponent
oTFS = oDoc.getTextFields
enum = oTFS.createEnumeration
While enum.hasMoreElements
oTF = enum.nextElement
Select Case oTF.Content
Case "Anrede" : A = oTF.Anchor.String
Case "Datum" : D = oTF.Anchor.String
Case "Referentie" : R = oTF.Anchor.String
End Select
Wend
U = "-"
filename = A & U & D & U & R & U & ".pdf"
url = ConvertToURL("file:///media/documenten/PDF/" & filename)'Insert Your Desired Directory Path.
oDoc.StoreAsURL(url,Array())
oDoc.Modified = false 'avoid Save being called if doc closed without further edits.
End 'end normal execution.
EH: 'error handler.
MsgBox "You may have illegal file name character." & Chr(13)_
& Chr(13) & filename,,"AN ERROR OCCURRED"
End Sub
Andreas

LibreOffice 4.4.7.2. op Linux Mint en zeker geen Versie 5 meer.
Atwist
 
Berichten: 52
Geregistreerd: ma sep 14, 2015 8:56 am

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » za maart 19, 2016 4:14 pm

Hallo

Als onze programmeur de onerror uitschakelt dat krijgt hij:BASIC runtime error.
Property or method not found: Content.

Als ik jouw goed begrijp werk je met een tekstvak. Ik weet niet wat het tekst vak inhoudt maar dat zou wel eens niet kunnen werken met de door jouw gekozen macro oplossing. Het kan kan waarschijnlijk ook niet werken met wat ik kies namelijk een zelf gemaakt veld.
menu --Bestand --> eigenschappen --> Gebruikers gedefinieerde eigenschappen
Ik heb een veld aan gemaakt op die pagina.

Het stukje macro code wat ik gebruik wil daar mee samen werken. Ik denk ook dat dat gemakkelijker is en ook meer aanbevolen. Dat veld kan ook vaker gebruikt worden. Bij het gebruik van macro's in OOo is het altijd belangrijk om goed aan te sluiten bij de aanbevolen manier van werken. Ik kan mij herinneren dat het werken met velden ook voor mij niet gemakkelijk was maar toch is het wel een goede manier. Ook de macro's worden dan eenvoudiger.

Databases worden door middel van velden met diverse documenten met elkaar verbonden. Database velden worden wel op een andere manier benaderd in een document ook weer geheel anders dan in een formulier.

Zo mijn advies kies eerst een goed uitgangspunt en ga dan. Ik wil niet vervelend zijn maar ik denk dat je ook veel onderzoek plezier kunt beleven aan het goed doorgronden aan gaande wat er mogelijk is met velden. Het helpt je niet met de huidige vraag maar ik wil het ook niet uitsluiten.

Menu -- Invoegen --> Velden --> Overige
Zo als hier voor al beschreven het is op het snijvlak van tekst documenten en databases. Er zijn mogelijkheden voor het doen van testen.

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

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » za maart 19, 2016 11:22 pm

Hallo

De tekstvelden die gebruikt worden kunnen van alles bevatten. Dus naast testen op namen moet er ook getest worden op services. Zoals ik al geschreven heb ken ik dit deel ook niet en heb dus ook geen oplossing.

Het is overigens ook afhankelijk van welk soort velden je gebruikt. Ik kijk zelf ook alleen maar naar velden die niet met een database in verbinding staan maar die wel een variabele kunnen zijn in de tekst.

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

Re: Opslaan als naam in tekstvak.

Berichtdoor Atwist » zo maart 20, 2016 9:04 am

Romke,

Ik ben bijna bij de oplossing, het opslaan lukt al zit alleen nog even te klooien met de textfield name.
Krijg namelijk het datum veld niet uit te lezen,

Code: Selecteer alles   UitklappenInklappen
Sub Savetopdf
    On error goto EH
    Dim myProps(0) as New com.sun.star.beans.PropertyValue
    myProps(0).Name="FilterName"
    myProps(0).Value = "writer_pdf_Export"
    oDoc = ThisComponent
    oTFS = oDoc.getTextFields
    enum = oTFS.createEnumeration
    While enum.hasMoreElements
    oTF = enum.nextElement
    Select Case oTF.TextfieldMaster.Name
    Case "Anrede" : A = oTF.Anchor.String
    Case "Date" : D = oTF.Anchor.String
    Case "Referentie" : R = oTF.Anchor.String
    End Select
    Wend
    U = "-"
    filename = A & U & D & U & R & U & ".pdf"
    url = ConvertToURL("file:///media/documenten/PDF/" & filename)'Insert Your Desired Directory Path.
    oDoc.StoretoURL(url,myProps)
    oDoc.Modified = false 'avoid Save being called if doc closed without further edits.
    End 'end normal execution.
    EH: 'error handler.
    MsgBox "You may have illegal file name character." & Chr(13)_
    & Chr(13) & filename,,"AN ERROR OCCURRED"
End Sub
Andreas

LibreOffice 4.4.7.2. op Linux Mint en zeker geen Versie 5 meer.
Atwist
 
Berichten: 52
Geregistreerd: ma sep 14, 2015 8:56 am

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » zo maart 20, 2016 11:12 am

Hallo

In deze post plaats ik het resultaat van mijn eigen zoeken. Het is nog wel wat rommelig om dat ik nog niet geheel tevreden ben. In de eerste sub zit mogelijk ook de oplossing over het ontleden van een struc die een datum bevat.

Code: Selecteer alles   UitklappenInklappen
sub  onSaveDocument
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim oDoc
dim oCreationDate
dim oDocumentProperties
oDoc= thiscomponent
oDocumentProperties=oDoc.DocumentProperties 'Here we can find the standard properties

oCreationDate=oDocumentProperties.CreationDate ' We want have the creation date
'Format takes carefor double digit in month and day. I use underscore
dim sFileName ' we create the filename
sFileName = oDocumentProperties.getUserDefinedProperties.Aan ' Userdefined names are deeper
sFileName =sFileName & format(oCreationDate.year,"_0000"
sFileName =sFileName & format(oCreationDate.month,"_00")
sFileName =sFileName & format(oCreationDate.day,"_00")
rem get access to the document

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

rem ----------------------------------------------------------------------
dim args1(4) as new com.sun.star.beans.PropertyValue
'args1(0).Name = "URL"
'args1(0).Value = "file:///home/romgro/Documenten/opof/data/writer/Hulpprogramma/savefilename/goedgedaan.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
args1(2).Name = "FilterData"


args1(3).Name = "SuggestedSaveAsDir"
args1(3).Value = "file:///home/romgro/Documenten/opof/data/writer/Hulpprogramma/savefilename/"
args1(4).Name = "SuggestedSaveAsName"
args1(4).Value = "Warempel01"

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

end sub


Dit deel onderzoekt allerlei services die gebruikt kunnen worden. Dit is om inzicht te krijgen in de verschillende services
Code: Selecteer alles   UitklappenInklappen
Sub Savetopdfromke
'On error resume next
oDoc = ThisComponent
oTFS = oDoc.getTextFields
enum = oTFS.createEnumeration
While enum.hasMoreElements
oTF = enum.nextElement
      if oTF.supportsService("com.sun.star.text.textfield.docinfo.CreateAuthor") then
            print "auteur"
      elseif oTF.supportsService("com.sun.star.text.TextField.InputUser") then
            print oTF.Content
            print Otf.Anchor.string
      elseif oTF.supportsService("com.sun.star.text.TextField.User") then
            'print oTF.Content
            print Otf.Anchor.string
      elseif oTF.supportsService("com.sun.star.text.TextField.DocInfo.Description") then
            print oTF.Content
            print Otf.Anchor.string
            print Oft.CurrentPresentation
      elseif oTF.supportsService("com.sun.star.text.TextField.DocInfo.Custom") then
      'mri OTF
      
            print oTF.Name
            print Otf.Anchor.string
            print Otf.CurrentPresentation
      
      
      elseif oTF.supportsService("com.sun.star.text.TextField.Database") then
            print oTF.Content
            print Otf.CurrentPresentation
            print Otf.Anchor.string
      
      else
      mri OTF
      
      end if
Wend
end sub


Uit mijn bijdragen blijkt dat er mogelijk twee benaderings methoden zijn. Je kunt gebruik maken van textfields en op die manier letterlijk de tekst doorlopen. Het kan zijn dat een textfield heel vaak gebruikt en dan moet dat geheel door gewerkt worden. Documentinfo maakt voorzover ik het nu begrijp gebruik van de zelfde basis gegevens maar die staan slechts een enkele keer benoemd. Het is niet eens nodig dat ze in de tekst staan.

Sjabloon
Gezien het feit dat het in principe een sjabloon is vraag ik mij ook af hoe dat gebruikt kan worden. Ik heb nog gekeken naar variabelen in combinatie met een inputveld. Ik het veld al wel vinden met de sub voor veel services maar kan het nog niet vinden als ik zoek op naam. Het eind resultaat is dan ook afhankelijk hoe alles gegenereerd word.

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

Re: Opslaan als naam in tekstvak.

Berichtdoor RPG » zo maart 20, 2016 12:42 pm

Hallo

Ik heb nog iets gevonden namelijk hoe userfields gevonden kunnen worden.

Code: Selecteer alles   UitklappenInklappen
Sub VoorTextfieldmasters
oDoc = ThisComponent
oTFMS = oDoc.getTextFieldMasters
dim gewenstfield
gewenstfield=oTFMS.getbyname("com.sun.star.text.fieldmaster.User.Naarwie") ' The last part is the name given by the user
print left(gewenstfield.Content,len(gewenstfield.Content)-1) ' Be aware that field can contain a paragraph end.
End Sub


Ik heb dit niet uitgebreid getest maar het is waarschijnlijk dat er ook een hele reeks mogelijkheden zijn. De mogelijkheden zijn dan waarschijnlijk afhankelijk van de gekozen eigenschappen van de variabele. Het zal waarschijnlijk zo zijn: als je het ene goed begrijpt dat je dan die kennis kunt over brengen naar het andere.
Zoals je aan de code ziet die iets eerder geplaatst is gebruik ik de API ook om te testen: welke service is aanwezig. BASIC wordt niet zoveel gebruikt het is echt de API. Overigens begint alles met een goede kennis van de basis van writer. Het is belangrijk om die uitermate goed te kennen. Wanneer die basis mogelijkheden goed gebruikt worden dan is de code gemakkelijker.

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


Keer terug naar Writer

Wie is er online

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