[Writer] Modifier un ODT depuis Calc puis générer en PDF
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 27 oct. 2024 09:35
[Writer] Modifier un ODT depuis Calc puis générer en PDF
Bonjour à tous,
Pour commencer, je précise de suite que je n'ai aucune connaissance en codage/macro ou autre.
Je souhaiterais pouvoir générer des courriers automatiquement à partir d'un modèle sous Writer et de champs à modifier ( signets) renseignés sur ma feuille Calc.
Jusque là, j'ai réussi à glaner une macro qui me permet de faire le travail.
En revanche, au lieu de voir se lancer l'application Writer quand je lance la macro, je souhaiterais que mon courrier soit directement généré en PDF et que mon modèle de courrier sous Writer ne subisse aucune modification.
Pourriez-vous m'aider à agrémenter ma macro pour pouvoir faire cela ?
( Petite précision : je souhaiterais que mon pdf soit automatiquement enregistré sous un chemin spécifique ( pas d'ouverture de boite de dialogue pour choisir le dossier de destination afin de diminuer le nombre de clic ) , qu'il soit renommé selon le texte inscrit dans une cellule spécifique et qu'il s'ouvre directement lors du lancement de la macro).
J'ai tenté en vain plusieurs solutions.
Je vous mets en pièce jointe mes fichiers Calc et Writer.
Je vous remercie à l'avance de l'aide que vous pourrez m'accorder.
Bonne journée.
Pour commencer, je précise de suite que je n'ai aucune connaissance en codage/macro ou autre.
Je souhaiterais pouvoir générer des courriers automatiquement à partir d'un modèle sous Writer et de champs à modifier ( signets) renseignés sur ma feuille Calc.
Jusque là, j'ai réussi à glaner une macro qui me permet de faire le travail.
En revanche, au lieu de voir se lancer l'application Writer quand je lance la macro, je souhaiterais que mon courrier soit directement généré en PDF et que mon modèle de courrier sous Writer ne subisse aucune modification.
Pourriez-vous m'aider à agrémenter ma macro pour pouvoir faire cela ?
( Petite précision : je souhaiterais que mon pdf soit automatiquement enregistré sous un chemin spécifique ( pas d'ouverture de boite de dialogue pour choisir le dossier de destination afin de diminuer le nombre de clic ) , qu'il soit renommé selon le texte inscrit dans une cellule spécifique et qu'il s'ouvre directement lors du lancement de la macro).
J'ai tenté en vain plusieurs solutions.
Je vous mets en pièce jointe mes fichiers Calc et Writer.
Je vous remercie à l'avance de l'aide que vous pourrez m'accorder.
Bonne journée.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice version 7.2.7.2M7(x64)
Windows 10
Windows 10
-
- RespOOnsable forum
- Messages : 12457
- Inscription : 08 nov. 2005 16:23
- Localisation : Caen, France
Re: Modifier un document odt depuis Calc puis générer en PDF
Bonjour et bienvenue,
Votre question a été logiquement déplacée dans la section Macros.
Pensez à lire le descriptif de la page d'accueil pour poster au bon endroit la prochaine fois.
J'ai corrigé le titre afin qu'il soit conforme (cf. bandeau rouge au dessus).
Et publiez à la suite son code en l'encadrant comme ceci :
Votre question a été logiquement déplacée dans la section Macros.
Pensez à lire le descriptif de la page d'accueil pour poster au bon endroit la prochaine fois.
J'ai corrigé le titre afin qu'il soit conforme (cf. bandeau rouge au dessus).
Veuillez donner le lien où vous avez trouvée cette macro.
Et publiez à la suite son code en l'encadrant comme ceci :
Code : Tout sélectionner
code de la macro
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 27 oct. 2024 09:35
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Merci pour les modifications apportées à mon titre.
Le lien à partir duquel j'ai puisé le code que j'utilise provient de ce forum :
viewtopic.php?p=304853#p304853
Je l'ai légèrement modifié afin qu'il ne soit plus nécessaire de sélectionner une ligne sur Calc.
Voici ce que ça donne :
Comme précisé dans mon précédent message, je souhaiterais pouvoir générer le résultat en PDF.
Merci à vous !
Le lien à partir duquel j'ai puisé le code que j'utilise provient de ce forum :
viewtopic.php?p=304853#p304853
Je l'ai légèrement modifié afin qu'il ne soit plus nécessaire de sélectionner une ligne sur Calc.
Voici ce que ça donne :
Code : Tout sélectionner
Sub EditionDevis()
Dim oCalc As Object
Dim oFeuille, oCell As Object
Dim sSuivi, sDestinataire, sTelephone, sMontant, sReference, sAdresse, sCivilite As String
Dim dDateDemande As Date
oCalc = ThisComponent
oFeuille = oCalc.getSheets.getByName("Feuille1")
'Récupération des données du client
sSuivi = oFeuille.getCellRangeByName("B3").String
sTelephone = oFeuille.getCellRangeByName("B4").String
sReference = oFeuille.getCellRangeByName("B6").String
sCivilite = oFeuille.getCellRangeByName("B8").String
sDestinataire = oFeuille.getCellRangeByName("B9").String
sAdresse = oFeuille.getCellRangeByName("B10").String
sMontant = oFeuille.getCellRangeByName("B12").String
'Création du document basé sur son modèle
Dim oWriter As Object
Dim sAdresseDoc As String
Dim Args() As New com.sun.star.beans.PropertyValue
sAdresseDoc = ConvertToURL(getDirectory(oCalc.URL) & "WriterTEST.odt")
oWriter = StarDesktop.LoadComponentFromURL(sAdresseDoc, "_blank", 0, Args() )
'Ecriture dans le document
EcrireAuSignet(oWriter, "date", Date) 'Date du jour
EcrireAuSignet(oWriter, "suivi", sSuivi)
EcrireAuSignet(oWriter, "téléphone", sTelephone)
EcrireAuSignet(oWriter, "référence", sReference)
EcrireAuSignet(oWriter, "civilité", sCivilite)
EcrireAuSignet(oWriter, "adresse", sAdresse)
EcrireAuSignet(oWriter, "destinataire", sDestinataire)
EcrireAuSignet(oWriter, "montant", sMontant)
End Sub
'_____________________________________________________________________________
'Atteindre le signet passé en paramètre et écriture
Sub EcrireAuSignet (odoc As Object, sSignet As String, sTexte As String)
Dim oTexte As Object
Dim oSignet As Object, oCurseur As Object
oSignet = odoc.Bookmarks.getByName(sSignet)
oTexte = oSignet.Anchor.Text
oCurseur = oTexte.createTextCursorByRange(oSignet.Anchor.Start)
oTexte.insertString( oCurseur, sTexte, false)
End Sub
Comme précisé dans mon précédent message, je souhaiterais pouvoir générer le résultat en PDF.
Merci à vous !
LibreOffice version 7.2.7.2M7(x64)
Windows 10
Windows 10
-
- SuppOOrter
- Messages : 1466
- Inscription : 18 janv. 2008 09:02
- Localisation : Val de Marne
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Bonjour,
Ça se fait tout seul en ouvrant le modèle, le fichier créé porte le nom "Sans nom.odt"
En cas de difficulté, je peux aider.
Je suppose que le fichier odt n' a pas besoin d'être enregistré ?
Petite remarque : je péfère utiliser des champs plutôt que des repères de texte, c'est plus facile à manipuler...
Cordialement,
Un peu, quand même ? au vu de ton fichier ....
Pour ça, il me semble indispensable que le fichier soit ouvert, pour utiliser ensuite la méthode ExportToPDF, comme Dude le préconise dans ce post.En revanche, au lieu de voir se lancer l'application Writer quand je lance la macro, je souhaiterais que mon courrier soit directement généré en PDF
Eh bien justement, il faudrait que le fichier original soit enregistré comme modèle (extension "ott"), à partir duquel créer un nouveau document.et que mon modèle de courrier sous Writer ne subisse aucune modification.
Ça se fait tout seul en ouvrant le modèle, le fichier créé porte le nom "Sans nom.odt"
Code : Tout sélectionner
Dim Args() As New com.sun.star.beans.PropertyValue
sAdresseDoc = ConvertToURL("Monchemin\MonModele.ott")
oWriter = StarDesktop.LoadComponentFromURL(sAdresseDoc, "_blank", 0, Args() )
Tu trouveras ça aussi dans le post cité plus haut.Petite précision : je souhaiterais que mon pdf soit automatiquement enregistré sous un chemin spécifique
En cas de difficulté, je peux aider.
Je suppose que le fichier odt n' a pas besoin d'être enregistré ?
Petite remarque : je péfère utiliser des champs plutôt que des repères de texte, c'est plus facile à manipuler...
Cordialement,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 27 oct. 2024 09:35
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Merci jeanmi2403 pour ta réponse.
Déjà, pour ce qui est de l'utilisation d'un modèle Writer en extension "ott" au lieu de mon fichier original, c'est nickel.
Ensuite, je me suis basée sur le post dont tu as fait référence pour en tirer une portion de code qui me permet l'extraction en PDF de mon fichier :
Le soucis est que cela me renvoi à un message d'erreur...
Autre question, le fichier que je souhaite exporter en PDF est un fichier odt, généré sous Writer.
De ce fait, je me demande si la commande : propFich(0).Value = "Calc_pdf_Export" est bien appropriée
Merci à vous.
Déjà, pour ce qui est de l'utilisation d'un modèle Writer en extension "ott" au lieu de mon fichier original, c'est nickel.
Ensuite, je me suis basée sur le post dont tu as fait référence pour en tirer une portion de code qui me permet l'extraction en PDF de mon fichier :
Code : Tout sélectionner
Sub EditionDevis()
Dim oCalc As Object
Dim oFeuille As Object
Dim sSuivi, sDestinataire, sTelephone, sMontant, sReference, sAdresse, sCivilite As String
Dim dDateDemande As Date
oCalc = ThisComponent
oFeuille = oCalc.getSheets.getByName("Feuille1")
'Récupération des données du client
sSuivi = oFeuille.getCellRangeByName("B3").String
sTelephone = oFeuille.getCellRangeByName("B4").String
sReference = oFeuille.getCellRangeByName("B6").String
sCivilite = oFeuille.getCellRangeByName("B8").String
sDestinataire = oFeuille.getCellRangeByName("B9").String
sAdresse = oFeuille.getCellRangeByName("B10").String
sMontant = oFeuille.getCellRangeByName("B12").String
'Création du document basé sur son modèle
Dim oWriter As Object
Dim sAdresseDoc As String
Dim Args() As New com.sun.star.beans.PropertyValue
sAdresseDoc = ConvertToURL(getDirectory(oCalc.URL) & "modèle1.ott")
oWriter = StarDesktop.LoadComponentFromURL(sAdresseDoc, "_blank", 0, Args() )
'Ecriture dans le document
EcrireAuSignet(oWriter, "date", Date) 'Date du jour
EcrireAuSignet(oWriter, "suivi", sSuivi)
EcrireAuSignet(oWriter, "téléphone", sTelephone)
EcrireAuSignet(oWriter, "référence", sReference)
EcrireAuSignet(oWriter, "civilité", sCivilite)
EcrireAuSignet(oWriter, "adresse", sAdresse)
EcrireAuSignet(oWriter, "destinataire", sDestinataire)
EcrireAuSignet(oWriter, "montant", sMontant)
' Extraction PDF
Dim repertoire, extension, url, adressedoc, cellule As String
repertoire = "C:\Users\Public\Documents\"
cellule = oFeuille.GetCellRangeByName("B9").String
extension = ".pdf"
url = repertoire + cellule + extension
Dim propFich(0) as New com.sun.star.beans.PropertyValue
adressedoc = ConvertToUrl(url)
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filtreProps()
propFich(2).Name = "URL"
propFich(2).Value = adressedoc
propFich(3).Name = "Overwrite"
propFich(3).Value = true
oWriter.storeToURL(adressedoc, propFich())
End Sub
'_____________________________________________________________________________
'Atteindre le signet passé en paramètre et écriture
Sub EcrireAuSignet (odoc As Object, sSignet As String, sTexte As String)
Dim oTexte As Object
Dim oSignet As Object, oCurseur As Object
oSignet = odoc.Bookmarks.getByName(sSignet)
oTexte = oSignet.Anchor.Text
oCurseur = oTexte.createTextCursorByRange(oSignet.Anchor.Start)
oTexte.insertString( oCurseur, sTexte, false)
End Sub
Autre question, le fichier que je souhaite exporter en PDF est un fichier odt, généré sous Writer.
De ce fait, je me demande si la commande : propFich(0).Value = "Calc_pdf_Export" est bien appropriée
Merci à vous.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice version 7.2.7.2M7(x64)
Windows 10
Windows 10
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Salut,
Index hors de la plage :
Après c'est sûr qu'avec le filtre "Writer_pdf_Export", ça serait mieux.
Index hors de la plage :
Code : Tout sélectionner
Dim propFich(3) as New com.sun.star.beans.PropertyValue
-
- SuppOOrter
- Messages : 1466
- Inscription : 18 janv. 2008 09:02
- Localisation : Val de Marne
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Bonjour,
Entretemps, j'ai travaillé un peu dessus et je me suis rendu compte qu'il y a besoin de moins de paramètres, et j'utilise l'export direct dans une procédure :
Et, ensuite, une procédure pour afficher le PDF généré :
Et, pour finir, fermer le fichier ouvert sans le sauvegarder :
Bonne journée,
Exact ! Vu qu'il s'agit d'un fichier Writer, le filtre est Writer_pdf_Export.arwy a écrit :Autre question, le fichier que je souhaite exporter en PDF est un fichier odt, généré sous Writer.
De ce fait, je me demande si la commande : propFich(0).Value = "Calc_pdf_Export" est bien appropriée
Entretemps, j'ai travaillé un peu dessus et je me suis rendu compte qu'il y a besoin de moins de paramètres, et j'utilise l'export direct dans une procédure :
Code : Tout sélectionner
' -------------------------
'créer le nom du fichier avec le nom du client,
sAdressePDF =ConvertToURL ( "i:\TrvOpen\Exemples\" & oFeuille.getCellRangeByName("B9").String & ".pdf")
EcrirePDF (oWriter, sAdressePDF)
'----------------------------
Sub EcrirePDF (oDocument as Object, sAdresseDoc as String)
oFrame = oDocument.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = sAdresseDoc
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
dispatcher.executeDispatch(oFrame, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub
Code : Tout sélectionner
' Lance l'exécution d'un fichier. Dans le cas d'un document, ouvre l'application associée au type de fichier
Sub AfficherPDF(sAdresse as String)
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
oShell.execute(ConvertToURL(sAdresse), "" , 0)
End Sub
Code : Tout sélectionner
oWriter.close(True)
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 27 oct. 2024 09:35
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Et bien un grand merci !
Tout fonctionne à merveille.
Je m'en vais de ce pas continuer à agrémenter mon formulaire de base.
A très vite je pense !!!
Tout fonctionne à merveille.
Je m'en vais de ce pas continuer à agrémenter mon formulaire de base.
A très vite je pense !!!
LibreOffice version 7.2.7.2M7(x64)
Windows 10
Windows 10
-
- RespOOnsable forum
- Messages : 12457
- Inscription : 08 nov. 2005 16:23
- Localisation : Caen, France
Re: [Writer] Modifier un ODT depuis Calc puis générer en PDF
Pour clore votre sujet :
- Placez-vous sur le premier message de votre fil de discussion
- En haut à droite de ce message, cliquez sur le bouton du petit crayon pour modifier.
- Modifiez le titre du message en cochant l'icône et en tapant [Résolu] (respectez la mise en forme donnée) comme illustré ci-dessous :