[Résolu][Calc] Sélection de cellule pour export en PDF

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 !
Avatar de l’utilisateur
xillibit
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 22 avr. 2006 11:38

[Résolu][Calc] Sélection de cellule pour export en PDF

Message par xillibit »

Bonjour,

Je fais enregistrer une macro sous calc, dans format page dans l'onglet page je définis A4 et portrait, dans l'onglet feuille, dans la liste Mode échelle, je choisis « Adapter les zones d'impression en hauteur et largeur », je fais ok. Je sélectionne des cellules, je vais dans Fichier → Exporter au format PDF et là je choisis Sélection, je fais Exporter, j'enregistre le fichier. J'enregistre ma macro, quand je l’exécute, ça m'ouvre la fenêtre Style de page pour que je fasse quelque chose, je fais et là cela exporte le pdf mais sans choisir uniquement ma sélection.

Je ne comprends pas bien ce qui ne vas ? Auriez-vous une idée ?

Merci d'avance
Dernière modification par xillibit le 06 sept. 2012 13:07, modifié 2 fois.
LibreOffice 5.4.6.2 sous Windows 7 64 bits
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] Macro pour export en PDF

Message par Churay »

Bonjour

L'exportation au format pdf revient régulièrement : donc des exemples existent sur le forum.

Entre autres ici http://user.services.openoffice.org/fr/ ... 80#p177252

Image
Comment joindre un fichier au format ODF
Veillez également à dépersonnaliser votre fichier joint.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
xillibit
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 22 avr. 2006 11:38

Re: [Calc] Sélection de cellule pour export en PDF

Message par xillibit »

J'ai réussi à trouver comment faire pour l'exportation en PDF, il y a trois choses en plus que je n'arrive pas à faire :

-Définir dans les styles de ma page, dans l'onglet Feuille, pour la liste Modèle = Adapter les zones d'impression en hauteur et largeur
tttt.png
-Récupérer le nom du document actif
-Récupérer le nom de l'onglet actif
-Récupérer la zone d'impression qui a été définie
selection.png
Voila mon code :

Code : Tout sélectionner

REM  *****  BASIC  *****

sub exportPDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
Dim view As Object

view= thiscomponent.getCurrentController()
fam=thiscomponent.stylefamilies.getbyname("PageStyles")
sh=view.getActivesheet()
style=fam.getbyname(sh.PageStyle)
style.Width = 21000
style.Height = 29700
style.IsLandscape = False

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim LibOSelCourante as object
LibOSelCourante = ThisComponent.CurrentSelection

if LibOSelCourante.supportsService("com.sun.star.sheet.SheetCellRange") then
	dim MonFiltre(0) as new com.sun.star.beans.PropertyValue
	MonFiltre(0).Name = "Selection"
	MonFiltre(0).Value = ThisComponent.CurrentSelection
	
	rem ----------------------------------------------------------------------
	dim args1(2) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "URL"
	args1(0).Value = "file:///C:/Documents%20and%20Settings/toto/Bureau/dupont_jean-michel_2012.pdf"
	args1(1).Name = "FilterName"
	args1(1).Value = "calc_pdf_Export"
	args1(2).Name = "FilterData"
	args1(2).Value = MonFiltre() 
	
	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())

else
	msgbox "la sélection doit être soit une cellule, soit une ou plusieurs plages de cellules"
end if

end sub


Sub Main

End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.4.6.2 sous Windows 7 64 bits
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] Sélection de cellule pour export en PDF

Message par Churay »

Re
-Récupérer le nom du document actif
-Récupérer le nom de l'onglet actif
-Récupérer la zone d'impression qui a été définie

Code : Tout sélectionner

Sub Main
	MsgBox NomDOC, 64, "Nom du document"
	MsgBox NomOnglet, 64, "Nom de l'onglet actif"
	MsgBox ZoneImpression, 64, "Zone d'impression"
End Sub

Function NomDOC As String
	NomDOC = thisComponent.Title
End Function 

Function NomOnglet
	NomOnglet = thisComponent.CurrentController.ActiveSheet.Name
End Function 

Function ZoneImpression
Dim oPrint 
	oPrint = thisComponent.Sheets.getByName(thisComponent.CurrentController.ActiveSheet.Name).PrintAreas
	thisComponent.CurrentController.select(oPrint(0))
	ZoneImpression = thisComponent.CurrentSelection.AbsoluteName
End Function 
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
xillibit
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 22 avr. 2006 11:38

Re: [Calc] Sélection de cellule pour export en PDF

Message par xillibit »

J'ai modifié ma macro avec ce que tu m'as donné, la partie pour sélectionner la zone d'impression ne fonctionne pas (Valeur ou type de donnée incorrecte. Index hors de la plage définie), je voudrais aussi supprimer l'extension dans thisComponent.Title :

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Main
   
End Sub


sub exportPDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
Dim view As Object

view= thiscomponent.getCurrentController()
fam=thiscomponent.stylefamilies.getbyname("PageStyles")
sh=view.getActivesheet()
style=fam.getbyname(sh.PageStyle)
style.Width = 21000 
style.Height = 29700
rem définit la page en portrait
style.IsLandscape = False
rem définit l'échelle de la page en adaptation pour l'impression en hauteur et largeur 
style.ScaleToPagesX = 1
style.ScaleToPagesY = 1

rem sélection de la zone d'impression
oPrint = thisComponent.Sheets.getByName(thisComponent.CurrentController.ActiveSheet.Name).PrintAreas
thisComponent.CurrentController.select(oPrint(0))
ZoneImpression = thisComponent.CurrentSelection.AbsoluteName

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim LibOSelCourante as object
LibOSelCourante = ThisComponent.CurrentSelection

rem vérifie que l'on a bien sélectionné une plage de cellule
if LibOSelCourante.supportsService("com.sun.star.sheet.SheetCellRange") then
	dim MonFiltre(0) as new com.sun.star.beans.PropertyValue
	MonFiltre(0).Name = "Selection"
	MonFiltre(0).Value = ZoneImpression
	
	rem ThisComponent.CurrentSelection
	
	rem ----------------------------------------------------------------------
	dim args1(2) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "URL"
	args1(0).Value = "file:///C:/Documents%20and%20Settings/toto/Bureau/" + thisComponent.Title + "_" + thisComponent.CurrentController.ActiveSheet.Name + ".pdf"
	args1(1).Name = "FilterName"
	args1(1).Value = "calc_pdf_Export"
	args1(2).Name = "FilterData"
	args1(2).Value = MonFiltre() 
	
	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())

else
	msgbox "La sélection doit être soit une cellule, soit une ou plusieurs plages de cellules"
end if

end sub
LibreOffice 5.4.6.2 sous Windows 7 64 bits
Avatar de l’utilisateur
xillibit
Membre OOrganisé
Membre OOrganisé
Messages : 96
Inscription : 22 avr. 2006 11:38

Re: [Calc] Sélection de cellule pour export en PDF

Message par xillibit »

J'ai trouvé comment supprimer l'extension dans le nom du fichier, maintenant il me reste à voir pourquoi la récupération de la zone d'impression ne fonctionne pas:

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Main
   
End Sub


sub exportPDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim oPrint as object
Dim view As Object

If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
 GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If

view= thiscomponent.getCurrentController()
fam=thiscomponent.stylefamilies.getbyname("PageStyles")
sh=view.getActivesheet()
style=fam.getbyname(sh.PageStyle)
style.Width = 21000 
style.Height = 29700
rem définit la page en portrait
style.IsLandscape = False
rem définit l'échelle de la page en adaptation pour l'impression en hauteur et largeur 
style.ScaleToPagesX = 1
style.ScaleToPagesY = 1

rem sélection de la zone d'impression
oPrint = thisComponent.Sheets.getByName(thisComponent.CurrentController.ActiveSheet.Name).PrintAreas
thisComponent.CurrentController.select(oPrint(0))
ZoneImpression = thisComponent.CurrentSelection.AbsoluteName

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim LibOSelCourante as object
LibOSelCourante = ThisComponent.CurrentSelection

rem vérifie que l'on a bien sélectionné une plage de cellule
if LibOSelCourante.supportsService("com.sun.star.sheet.SheetCellRange") then
	dim MonFiltre(0) as new com.sun.star.beans.PropertyValue
	MonFiltre(0).Name = "Selection"
	MonFiltre(0).Value = ThisComponent.CurrentSelection
	
	
	rem ----------------------------------------------------------------------
	dim args1(2) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "URL"
	args1(0).Value = "file:///C:/Documents%20and%20Settings/toto/Bureau/" + GetFileNameWithoutExtension(thisComponent.Title) + "_" + thisComponent.CurrentController.ActiveSheet.Name + ".pdf"
	args1(1).Name = "FilterName"
	args1(1).Value = "calc_pdf_Export"
	args1(2).Name = "FilterData"
	args1(2).Value = MonFiltre() 
	
	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())

else
	msgbox "La sélection doit être soit une cellule, soit une ou plusieurs plages de cellules"
end if

end sub
P.S. : J'ai trouvé comment résoudre mon problème, je mettrai le code
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.Image


En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Dernière modification par OOoch le 23 juil. 2012 19:03, modifié 1 fois.
Raison : Plusieurs messages à la suite.
LibreOffice 5.4.6.2 sous Windows 7 64 bits