[Résolu][Writer] Créer des fichiers à partir d'un rapport

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
Gaspar66
Fraîchement OOthentifié
Messages : 7
Inscription : 08 nov. 2017 20:25
Localisation : 66

[Résolu][Writer] Créer des fichiers à partir d'un rapport

Message par Gaspar66 »


La modération vous a écrit: Sujet déplacé vers la section Macros et API. Notez l'ajout de la balise [Writer]

Bonjour,
je cherche à créer autant de fichiers que de page d'un rapport issu de dbase.

Je n'arrive pas à adapter le code de Piaf que j'ai pu trouver dans cette discussion :

https://forum.openoffice.org/fr/forum/v ... =8&t=41470

Sur un document simple, il n'y a aucun souci pour créer un fichier à partir d'une page quelconque du fichier, par contre sur un rapport issu de dbase, la macro bloque, un message d'erreur s'affiche.

Chaque page du rapport est constitué de plusieurs tableaux imbriqués, je ne vois pas pourquoi cela bloque.

Je vous remercie d'avance pour vos réponses et vous souhaite un bon réveillon.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 04 janv. 2019 17:03, modifié 2 fois.
Raison : Ajout de [Résolu]
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Writer] Créer des fichiers à partir d'un rapport

Message par jeanmimi »

Bonjour,
Gaspar66 a écrit :je cherche à créer autant de fichiers que de page d'un rapport issu de dbase.
Comme à la source du Rapport, il y a une Table ou une Requête, pourquoi ne pas faire un publipostage avec enregistrement de fichiers individuels, avec chacun son propre nom ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
Messages : 7
Inscription : 08 nov. 2017 20:25
Localisation : 66

Re: [Writer] Créer des fichiers à partir d'un rapport

Message par Gaspar66 »

Bonjour,

pour un enregistrement précis, je n'ai pas de problème mais là, il s'agit d'un état qui regroupe les enregistrements sur un même champ de la base. Par exemple dans ma table, j'ai 5 enregistrements TRES. A que je regroupe sur une seule page du rapport avec les 5 dates qui se suivent.
Comme je ne sais pas comment m'y prendre pour coder tout ça, à partir de dbase, j'ai pensé que c'était plus simple d'exploiter directement le rapport issu de dbase pour créer des fichiers indépendants.
le code :

Code : Tout sélectionner

Sub test
Dim oDoc as Object, oTables as Object, oTable as Object, maCellule as Object
Dim nomFichier as String, adresseDoc as String
Dim curseurVisible as Object, oRangeFinPage as Object, aCopier as Object
	oDoc = ThisComponent
	oTables = oDoc.getTextTables()
	oTable = oTables.getByName("TAB1")
	maCellule = oTable.getCellByName("A1")
	nomFichier = maCellule.String
	curseurVisible = oDoc.CurrentController.ViewCursor
	With curseurVisible
		.jumpToPage(1)
		.jumpToEndOfPage
		oRangeFinPage = .end
		.jumpToStartOfPage
		.gotoRange(oRangeFinPage, true)
	End With
	adresseDoc = "private:factory/swriter"
	aCopier = ThisComponent.CurrentController.getTransferable()
	oDoc = StarDesktop.loadComponentFromURL(adresseDoc, "_blank", 0, Array() )
	curseurVisible = oDoc.currentController.viewCursor
	oDoc.CurrentController.Select(curseurVisible)
	oDoc.CurrentController.insertTransferable(aCopier)
	adresseDoc = convertToURL("C:\a/") & nomFichier & ".odt"
	oDoc.storeAsURL(adresseDoc, Array() )
	oDoc.Close(True)
End Sub
ne fonctionne pas sur des documents de type regroupement.

Cordialement.
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Writer] Créer des fichiers à partir d'un rapport

Message par Piaf »

Bonjour
Un peu Zappé le fil :oops:
Un fichier à tester

Code : Tout sélectionner

Option Explicit

Global Premier as Integer, Dernier as Integer

Sub Recopies
Dim oDoc as Object, oTables as Object, curseurVisible as Object
Dim derPage as Integer
	oDoc = thisComponent
	oTables = oDoc.getTextTables()
	curseurVisible = oDoc.CurrentController.ViewCursor
	curseurVisible.jumpToLastPage
	derPage = curseurVisible.Page
	Premier = 1 : Dernier = 3
	curseurvisible.jumpToFirstPage()	
	test(oDoc,oTables,CurseurVisible, Premier,Dernier)
	Do While CurseurVisible.Page < derPage
		curseurvisible.jumpToNextPage
		Premier = Dernier + 1 : Dernier = Dernier + 3
		test(oDoc,oTables,CurseurVisible, Premier,Dernier)		
	Loop
End Sub

Sub test(Document as Object, lesTables as Object, CurV as Object, prem as Integer, Der as Integer)
Dim oDoc2 as Object, oTable as Object, aCopier as Object, oCurV as Object
Dim oFrame as Object, oDispatch as Object
Dim x as Integer, nomFichier as String, adresseDoc as String, adresse
Dim Arg(0) as New com.sun.star.beans.PropertyValue
	Arg(0).Name = "Hidden"
	Arg(0).Value = True'
	adresseDoc = "private:factory/swriter"
	oDoc2 = StarDesktop.loadComponentFromURL(adresseDoc, "_default", 0, Arg() )
	For x = Prem To Der
		oTable = lesTables(x)
		if x = prem + 1 Then nomFichier = lesTables(x).getCellByName("C1").String
			Document.CurrentController.select(oTable)
			Curv.gotoEnd(True)
			CurV.gotoEnd(True)
			aCopier = ThisComponent.CurrentController.getTransferable()
			oCurV = oDoc2.currentController.viewCursor
			oDoc2.CurrentController.insertTransferable(aCopier)	
	Next x
	oCurV.gotoStart(False)
	oFrame   = oDoc2.CurrentController.Frame
	oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")
	oDispatch.executeDispatch(oFrame, ".uno:Delete", "", 0, Array())
	adresse = Split(Document.URL,"/")
	adresse(UBound(adresse())) = ""
	adresse = join(adresse, "/")
	adresse = ConvertToURL(adresse & nomFichier & ".odt")
	oDoc2.storeToURL(adresse, Array())	
	oDoc2.Close(True)
End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
Messages : 7
Inscription : 08 nov. 2017 20:25
Localisation : 66

Re: [Writer] Créer des fichiers à partir d'un rapport

Message par Gaspar66 »

Bonjour,
trop fort, un grand merci pour ce bout de code qui va me simplifier la vie.
Dans la programmation, je débute, et ça fait six mois que j'essaye de comprendre l'API d'OpenOffice. Ce n'est pas évident du tout pour moi. J'ai installé XRAY mais pour le moment je n'arrive pas à m'y retrouver. En parcourant votre forum, je vais essayer de persévérer. :marto:
Merci encore, pour ce code que je vais essayer de comprendre et pour toutes les réponses que vous apportez aux différents problèmes de programmation. :super:
A bientôt surement et bonne soirée.
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9252
Inscription : 28 août 2010 08:45

Re: [Writer] Créer des fichiers à partir d'un rapport

Message par micmac »