[Résolu][Calc]Export Pdf plage de cellules variable

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: 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 !

[Résolu][Calc]Export Pdf plage de cellules variable

Messagepar fneck » 14 Juin 2019 09:18

Bonjour,

Le code ci-joint fonctionnait parfaitement sous windows 7 avec Pdfcréator (filtrages des colonnes utiles et impression de la plage voulue au bon format avec visualisation préalable du Pdf.

Code : Tout sélectionner   AgrandirRéduire
Sub impression()

   ' mise en forme pour impression, création d'un fichier pdf
   Dim zoneImprim(0) As New com.sun.star.table.CellRangeAddress
   Dim stylesPage, StyleMaPage, enTete as Object
   Dim Texte2, Curseur2 As Object   
   Dim nomStyleMaPage As String   
   Dim Props(2) As New com.sun.star.beans.PropertyValue
   Props(0).Name = "PaperOrientation"
   Props(0).Value = com.sun.star.view.PaperOrientation.LANDSCAPE
   Props(1).Name = "PaperFormat"
   Props(1).Value = com.sun.star.view.PaperFormat.A4
   Props(2).Name = "Name"
   Props(2).Value = "PDFCreator"
   Mondoc.Printer = Props()
   maFeuille2 = Mondoc.Sheets.getByName("Données")

      ' recherche de la dernière ligne
      macell2 = maFeuille2.getCellRangeByName("A1")
      oCursor = maFeuille2.createCursorByRange(macell2)
      oCursor.GotoEndOfUsedArea(True)
      aAddress = oCursor.RangeAddress
      fin = aAddress.EndRow + 1
      
      ' on masque les colonnes Ne conserver que colonnes A G H L R S et T
      ' Soit respectivement, N° CHO, Numéro titre, NOM, Code ACT, Montant global RAR, TOTAL DU , et enfin, Commentaires
      macell2 = maFeuille2.getCellRangeByName("B1:F1")
      macell2.Columns.IsVisible = False
      macell2 = maFeuille2.getCellRangeByName("I1:K1")
      macell2.Columns.IsVisible = False      
      macell2 = maFeuille2.getCellRangeByName("M1:Q1")
      macell2.Columns.IsVisible = False               

      nomStyleMaPage = maFeuille2.PageStyle
      stylesPage = mondoc.StyleFamilies.getByName("PageStyles")
      StyleMaPage = stylesPage.getByName(nomStyleMaPage)
      StyleMaPage.HeaderIsOn = False
      StyleMaPage.FooterIsOn = True
      StyleMaPage.PageScale = 100

      zoneImprim(0).Sheet = 0
      zoneImprim(0).StartColumn = 0 : zoneImprim(0).StartRow = 1 ' A2
      zoneImprim(0).EndColumn = 19 : zoneImprim(0).EndRow = fin ' T
      Mondoc.currentController.setActiveSheet(Mondoc.Sheets.getByName("Données"))
      Mondoc.CurrentController.getActiveSheet().setPrintAreas(zoneImprim())
      Mondoc.Print(Array())

      wait 100
      
      macell2 = maFeuille2.getCellRangeByName("B1:Q1")
      macell2.Columns.IsVisible = True            

End Sub


Nous sommes maintenant sous Win 10 avec uniquement Microsoft print to Pdf et l'impression des plages utiles se lance directement sans visualisation du PDF (qui ne permettait d'imprimer que les feuilles nécessaires à chaque utilisateur en fonction du portefeuille de gestion de chacun.

J'ai cherché sur le forum et testé différentes solutions mais étant totalement néophyte en programmation je sollicite votre aide et vous remercie d'avance.
Dernière édition par fneck le 18 Juin 2019 15:08, édité 4 fois.
Obligation de version libreoffice 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]créer et visualiser Pdf

Messagepar Dredd » 14 Juin 2019 10:14

Bonjour,

PdfCreator n'a jamais fait partie des produits Microsoft Windows. C'est un logiciel à part qui s'installe très bien sous Windows 10.
Propulsé par OpenOffice 4.1.6 sous Windows 10 x64
Avatar de l’utilisateur
Dredd
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 341
Inscrit le : 24 Mai 2006 10:15
Localisation : Mega-City One

Re: [Calc]Export Pdf plage de cellules variable

Messagepar fneck » 14 Juin 2019 10:35

Merci mais les ordi du bureau sont archi vérouillés et je ne peux rien installer dessus d'où ma question pour savoir comment utiliser le générateur de pdf natif sur nos PC à savoir Microsoft Print to Pdf ou autre soluce en sachant que la mise en page est restée conforme aux souhaits de "mes" utilisateurs
Dernière édition par fneck le 17 Juin 2019 10:21, édité 1 fois.
Obligation de version libreoffice 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]Choix imprimante Pdf

Messagepar Dredd » 14 Juin 2019 11:25

Tu peux toujours poser ta question sur un forum Microsoft mais, cette imprimante virtuelle n'est bien sûr pas aussi élaborée.
Propulsé par OpenOffice 4.1.6 sous Windows 10 x64
Avatar de l’utilisateur
Dredd
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 341
Inscrit le : 24 Mai 2006 10:15
Localisation : Mega-City One

Re: [Calc]Export Pdf plage de cellules variable

Messagepar fneck » 14 Juin 2019 14:01

Je comprends mais ils ne s'y connaissent pas beaucoup plus que moi en macro ooo.
J'ai trouvé ce code sur un vieux post de 2009 ici même https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=16649&hilit=calc+pdf
Code : Tout sélectionner   AgrandirRéduire
sub ZoneImpression
   document = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")         
'Définition de la zone   
    Dim origZone(0) as new com.sun.star.beans.PropertyValue
           origZone(0).Name = "ToPoint"
      origZone(0).Value = "$a$2:$tS$18"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, origZone())
   dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0, Array())         
end sub

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

dim args2(2) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "SelectionOnly"
   args2(0).Value = 1
   args2(1).Name = "FilterName"
   args2(1).Value = "calc_pdf_Export"
   args2(2).Name = "URL"
   args2(2).Value = "C:/AdresseFichier.pdf"
   dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args2())
end sub

qui permet de lancer la bonne imprimante je pense mais il génère 1 erreur ("Erreur lors de l'enregistrement du document AdresseFichier") et je ne vois pas comment l'intégrer au code d'origine qui a pour effet de définir les plages utiles en excluant les autres.
Mais ne voulant pas faire de déterrage, je me demande s'il n'y a pas moyen de fusionner les 2.

 Ajout : J'ai aussi trouvé ce code qui génère bien un PDF sans intervention utilisateur mais qui ne l'ouvre pas et qui pourrait se faire après le filtrage de zone qui fonctionne dans la macro d'origine
Code : Tout sélectionner   AgrandirRéduire
Sub Main
dim propFich(1) As New com.sun.star.beans.PropertyValue
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filterProps()
adresseDoc = convertToURL("C:\Users\Public\Downloads\test.pdf") 'remplace ton chemin par l'endroit ou tu veux que le fichier soit enregistré
thiscomponent.storeToURL(adresseDoc, propFich())
End Sub

qu'en pensez vous? et encore merci :fou: 
Dernière édition par fneck le 17 Juin 2019 10:21, édité 1 fois.
Obligation de version libreoffice 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]Choix imprimante Pdf

Messagepar Dude » 14 Juin 2019 16:04

Tu mélanges "impression" et "export" qui sont deux notions différentes.

fneck a écrit:'imprimer que les feuilles nécessaires à chaque utilisateur

Il y a une extension qui fait parfaitement ce travail : viewtopic.php?f=18&t=32339
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20872
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc]Export Pdf plage de cellules variable

Messagepar fneck » 15 Juin 2019 15:40

1000 Merci Dude.je testerai Lundi pour voir si mes chers utilisateurs arrivent à l utiliser si tant est que je puisse installer des extensions OXT sur nos postes.
Si oui, je mettrai en résolu bien entendu.

:alerte: Alors le verdict: Malheureusement, cette extension qui pour ma part convient tout à fait (encore merci à Dude) ne sera pas exploitable par mes utilisateurs.
La sélection multiple n'étant pas des plus aisée pour eux (la navigation dans l'extension et les diverses possibilités pas d'avantage d'ailleurs).

Dude a écrit:Tu mélanges "impression" et "export" qui sont deux notions différentes.

J'ai modifié le titre en conséquence du coup.

Je vous joins un extrait du fichier
Extrait.ods
(18.92 Kio) Téléchargé 12 fois
les colonnes en jaune sont les seules que je souhaiterais conserver pour export en PDF en enregistrant l'export à l'endroit choisi par l'utilisateur (nom libre).
Celui-ci contient le code suivant que j'ai extrait d'ici https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=37997, merci à Luky-Luke;
Code : Tout sélectionner   AgrandirRéduire
Sub Main
   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(1) as new com.sun.star.beans.PropertyValue
   rem ----------------------------------------------------------------------
   dim args2(3) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "URL"
   
   'filename = ConvertToURL(DlgExport.getControl("cheminText").Text)
   
   args2(0).Value = filename
   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,50,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,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,1,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))
   args2(3).Name = "SelectionOnly"
   args2(3).Value = true
   
   dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args2())
   
   ' Suppression de la zone d'impression décrite au dessus
   dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, array())
   
   ' Sélection d'une cellule pour que cela fasse plus propre
   args1(1).Value = "$A$2:$A$2"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 1, args1())

end sub


Ce extrait de code (issu de la macro d'origine que vous pouvez trouver tout en haut de ce post) est parfaitement fonctionnel mais ne filtre pas la plage utile jusqu'à la dernière ligne (Jamais le même numéro de ligne)
J'ai aussi ce code qui fonctionnait avant sous pour sélectionner la plage utile jusuq'en dernière ligne et virer les colonnes superflues .
Code : Tout sélectionner   AgrandirRéduire
   ' recherche de la dernière ligne
      macell2 = maFeuille2.getCellRangeByName("A1")
      oCursor = maFeuille2.createCursorByRange(macell2)
      oCursor.GotoEndOfUsedArea(True)
      aAddress = oCursor.RangeAddress
      fin = aAddress.EndRow + 1
      
      ' on masque les colonnes Ne conserver que colonnes A G H L R S et T
      ' Soit respectivement, N° CHO, Numéro , NOM, Code ACT, Montant global RAR, TOTAL DU , et enfin, Commentaires
      macell2 = maFeuille2.getCellRangeByName("B1:F1")
      macell2.Columns.IsVisible = False
      macell2 = maFeuille2.getCellRangeByName("I1:K1")
      macell2.Columns.IsVisible = False      
      macell2 = maFeuille2.getCellRangeByName("M1:Q1")
      macell2.Columns.IsVisible = False               

      nomStyleMaPage = maFeuille2.PageStyle
      stylesPage = mondoc.StyleFamilies.getByName("PageStyles")
      StyleMaPage = stylesPage.getByName(nomStyleMaPage)
      StyleMaPage.HeaderIsOn = False
      StyleMaPage.FooterIsOn = True
      StyleMaPage.PageScale = 100


Alors s'il vous plaît :fou: , une bonne âme pour fusionner ces 2 codes et je pourrai mettre en résolu.

Enfin Résolu via l'enregistreur de macros et plusieurs copier, collage spécial (conserver formats mais pas les formules).
Code hideux mais ça a le mérite de faire le job.
Merci à tous ceux qui ont tenté de m'aider.
Obligation de version libreoffice 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)