PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD12] Publipostage Open Office 2.4
[WD12] Publipostage Open Office 2.4
Débuté par Mélanie, 13 oct. 2008 15:12 - 11 réponses
Posté le 13 octobre 2008 - 15:12
Bonjour,

Je rencontre un problème lorsque j'exécute un traitement de publipostage avec open office.
La fusion du document se fait correctement, le document final est bien enregistré avec la totalité des documents fusionnés.
Cependant à la sortie de la procédure alors que le traitement est terminé j'ai cette erreur :

---------------------------------------------------------
Détails techniques :

Module : WDTST.EXE
Version du module : 12.00Ak
VI : 01F120034d
Adresse de base : 00000000
Erreur système : Access violation (GPF)
EIP = 00000000
OS : Windows XP ou .NET Service Pack 2(5.1.2600)
---------------------------------------------------------

Voici Le code de la procédure :
Procedure Pr_PubliO0()
LOCAL
Vl_Url est une chaîne//Chemin du fichier de référence pour le publipostage
Vl_NomSource est une chaîne//Nom de la source de données
Vl_CheminODB est une chaîne//Chemin et nom de la base de données ODB
Vl_OutPutest une chaîne
Vl_Prefixeest une chaîne
Vl_Fusion est un objet OLE dynamique//Objet MailMerge pour effectuer la fusion
Vl_oDBContexte est un objet OLE dynamique//Objet Database
Vl_uneInstance est un objet OLE dynamique//Instance de base de données
Vl_nomDocBase est un objet OLE dynamique//Base de données
Vl_MyProps est un tableau de 0 Variants//Tableau des Propriétés de MailMerge pour la fusion
Vl_Args est un tableau de 2 objet automation dynamique//Tableau nécessaire aux paramètres du chargement du document de référence ODT
Vl_DbArgsest un tableau de 1 objet automation dynamique//Tableau de paramètres
Vl_InfoBase est un tableau de 5 objet automation dynamique//Propriétés de la base de données

//Termine le processus OpenOffice s'il est actif
LanceAppli("tskill soffice",exeIconise)

///Connection au service OpenOffice
Vg_oServiceManager = allouer un objet OLE ("com.sun.star.ServiceManager")
Vg_oDesktop = Vg_oServiceManager>>createInstance("com.sun.star.frame.Desktop")

//URL du document de référence pour le publipostage
Vl_Url="file:///P:/Bible/Test.odt"

//Paramètre de chargement du document : mode caché et en écriture
Vl_Args[1]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_Args[1]>>Name = "Hidden"
Vl_Args[1]>>Value = True
Vl_Args[2]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_Args[2]>>Name = "ReadOnly"
Vl_Args[2]>>Value = False

QUAND EXCEPTION DANS
//Chargement du document
Vg_oDocument=Vg_oDesktop>>LoadComponentFromURL(Vl_Url,"_blank",0,Vl_Args)

//Actualisation des liens du document
Vg_oDocument>>updateLinks

//*******************************************
//* Création de la source de données*
//*******************************************
Vl_NomSource="BASE"
Vl_oDBContexte = Vg_oServiceManager>>createInstance("com.sun.star.sdb.DatabaseContext")
vl_CheminODB="File:///P:/BASE.ODB"

SI Vl_oDBContexte>>hasByName(Vl_NomSource) ALORS
Vl_oDBContexte>>revokeObject(Vl_NomSource)
FIN
Vl_DbArgs[1] = Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_DbArgs[1]>>Name = "Overwrite"
Vl_DbArgs[1]>>Value = True

Vl_uneInstance = Vl_oDBContexte>>createInstance()
Vl_nomDocBase = Vl_uneInstance>>DatabaseDocument
Vl_nomDocBase>>storeAsURL(Vl_CheminODB,Vl_DbArgs)
//nomDocBase>>info = mNoArgs
Vl_oDBContexte>>registerObject(Vl_NomSource,Vl_uneInstance)
Vl_uneInstance>>URL="sdbc:flat:File:///P:/Bible"
Vl_InfoBase[1]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[1]>>Name = "Extension"
Vl_InfoBase[1]>>Value = "txt"
Vl_InfoBase[2]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[2]>>Name = "HeaderLine"
Vl_InfoBase[2]>>Value = True
Vl_InfoBase[3]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[3]>>Name = "FieldDelimiter"
Vl_InfoBase[3]>>Value = ";"
Vl_InfoBase[4]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[4]>>Name = "StringDelimiter"
Vl_InfoBase[4]>>Value = "''" //un guillemet
Vl_InfoBase[5]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[5]>>Name = "DecimalDelimiter"
Vl_InfoBase[5]>>Value = ","
Vl_uneInstance>>Info = Vl_InfoBase
Vl_nomDocBase>>store()

//*******************************************
//* Execution de la fusion*
//*******************************************
Vl_Fusion= Vg_oServiceManager>>createInstance("com.sun.star.text.MailMerge")
Vl_Fusion>>DataSourceName="BASE"
Vl_Fusion>>DocumentURL="file:///P:/Bible/test.odt"
Vl_Fusion>>CommandType=0
Vl_Fusion>>Command="MAJEUR"//nom de la table (fichier .txt)
Vl_Fusion>>OutputType=2 //1=édition, 2=fichier
Vl_Fusion>>OutputUrl="file:///P:/Archivage/" //Chemin d'enregistrement du document fusionné
Vl_Fusion>>FileNameFromColumn=False
Vl_Fusion>>FilenamePrefix="Fusion.odt" //Nom du docment fusionné
Vl_Fusion>>SaveAsSingleFile=True //1 seul fichier
Vl_Fusion>>Execute(Vl_MyProps)
Vl_oDBContexte>>revokeObject(Vl_NomSource)


//Fermeture du document
Vg_oDocument>>Dispose()
Vl_nomDocBase>>Dispose()
Vl_Fusion>>Dispose()
Vl_oDBContexte>>Dispose()
Vl_uneInstance>>Dispose()
Vl_oDBContexte>>Dispose()

//Termine les processus soffice.exe et soffice.bin
LanceAppli("tskill soffice",exeIconise)

Libérer Vl_Fusion
Libérer Vl_uneInstance
Libérer Vl_nomDocBase
Libérer Vl_oDBContexte
Libérer Vg_oDocument
Libérer Vg_oDesktop
Libérer Vg_oServiceManager

FAIRE
SI Vg_oDocument<>Null ALORS Vg_oDocument>>Dispose()
Libérer Vg_oDocument
Libérer Vg_oDesktop
Libérer Vg_oServiceManager
//Supprime les processus soffice.exe et soffice.bin
LanceAppli("tskill soffice",exeIconise)
Erreur("Problème lors de la fusion"+RC+ExceptionInfo(errComplet))
FIN

RETOUR


J'ai également fait des tests sur un poste Vista et l'erreur se produit également mais de manière aléatoire, alors que sur le poste XP c'est systématique.

Pour résoudre ce problème j'ai essayé ces deux méthodes en vain :
1- J'ai utilisé l'instruction RETOUR pour sortir du traitement, cela a résolu le problème momentanément.

2- Au moment de passer les paramètres de la base (Vl_InfoBase), je n'ai passé que l'extension du fichier (txt)
Vl_oDBContexte>>registerObject(Vl_NomSource,Vl_uneInstance)
Vl_uneInstance>>URL="sdbc:flat:File:///P:/Bible"
Vl_InfoBase[1]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[1]>>Name = "Extension"
Vl_InfoBase[1]>>Value = "txt"
Vl_uneInstance>>Info = Vl_InfoBase
Vl_nomDocBase>>store()
Je n'ai plus eu de message d'erreur à la fin du traitement mais la fusion ne tenait compte que du premier enregistrement de la base et ne passait pas aux enregistrements suivants.


Merci pour votre aide
Posté le 26 juin 2009 - 08:57
Bonjour,

J'ai le même problème que vous. Avez-vous trouvé une solution ?
Posté le 13 janvier 2010 - 18:38
Bonjour,

Quelqu'un a-t-il trouvé pourquoi le code donné dans les messages précédents "PLANTE" à la fin, alors que tout c'est executé ?

J'ai récupéré ce code en WD14 et je suis en OpenOffice 3.1 et j'ai le même problème.
Merci au prgrammeur qui a mis ce code sur le forum ;-), cela m'a permis de mieux comprendre le fonctionnement d'OpenOffice.
Mais pourquoi y-a-t-il une erreur à la fin, une fois toute la procédure executée.

L'application plante comme s'il y avait une erreur en mémoire, mais je ne comprend pas pourquoi !!!!

Corinne Bonhomme
Canada (Montréal)
Posté le 14 janvier 2010 - 23:37
Bonjour,

Quelqu'un a-t-il réussi à faire du publipostage avec OpenOffice ?

Si vous avez essayé et pas réussi, cela m'intéresse de le savoir
Avez-vous trouver une autre solution à part Word (car je le fait déjà en Word, mais on m'impose OpenOffice dans certains cas particulier)

C'est important, SVP, j'ai besoin de savoir si c'est un problème de code ou autres choses.

Le code ci-dessus fonctionne, mais plante à la fin en WD14-030f.
Avez-vous réussi a le faire fonctionner dans une autre version de Windev (12, 15...) ?

Je ne comprend pas ce qui pose un problème et si c'est la version de Windev qui a un problème avec OpenOffice, je suis en train de chercher pour rien dans le code...
Y-a-t-il une dll en problème (openoffice ou windev....)

Merci d'avance

Corinne Bonhomme
Canada
Posté le 15 janvier 2010 - 11:20
Bonjour,

Je n'ai pas trouvé de solution (il me semble que sous vista ça fonctionne mais sous XP c'est instable --> acces violation).

J'ai donc changé de méthode, je dezippe le fichier odt je travaille ensuite sur le xml puis je rezippe avec l'extension odt (car odt c'est des fichiers xml zippé).

On trouve pas mal de doc sur internet sur cette méthode.

Cordialement
Posté le 15 janvier 2010 - 15:58
Merci, c'est justement le genre de réponse que je voulais.

Je vais voir si ma repsonsable accepte que je passe du temps vers cette solution.
Si tu as des liens sur de la documentation bien faite, je prend.
De toute façon, cela pourra servir à d'autres.
Quand on cherche une solution Publipostage Windev/OpenOffice, on tourne pas mal en rond et il n'y a pas vraiment de solution qui marche, de détaillé.

J'ai vu quelque chose qui parle de ça sur le forum de OpenOffice.org

Merci beaucoup.

Corinne Bonhomme
Canada
Posté le 15 janvier 2010 - 16:44
Bonjour, j'ai eu aussi des problèmes lorsque je sortais d'une exécution OpenOffice.
Le problème était résolu avec une variable de libération (nVariableDeLibération & Transfert) - (assistance PC-Soft payante).
C'est à adapter à vos codes.
Je vous fournis le code proposé par l'assistance :
// Service Manager
pautServiceManager est un objet OLE dynamique
// Bureau
pautBureau est un objet OLE dynamique
// Document
pautDocument est un objet OLE dynamique
// Texte
pautMonTexte est un objet OLE dynamique
// Curseur
pautMonCurseur est un objet OLE dynamique
// Tableau d'arguments
tabArgs est un tableau de 0 objet OLE dynamique

// Tableau à insérer dans OpenOffice
pautMonTableau est un objet OLE dynamique

// Largeur du tableau
nLargeurTableau est un entier

// Séparateurs du tableau
tabSéparateur est un tableau de 3 objet automation dynamique
nVariableDeLibération est un entier

// Démarrage du Service Manager
Sablier(Vrai)
QUAND EXCEPTION DANS
// Initialisation des objets OLE
pautServiceManager=allouer un objet OLE ("com.sun.star.ServiceManager")
pautBureau=pautServiceManager>>createInstance("com.sun.star.frame.Desktop")
FAIRE
// OpenOffice n'est pas installé sur le poste.
// OpenOffice est nécessaire au bon fonctionnement du logiciel.
Info("OpenOffice n'est pas installé sur le poste.", "OpenOffice est nécessaire au bon fonctionnement du logiciel.", "Fermeture du programme")
// Fin du programme
FinProgramme()
FIN

// Création d'un nouveau document 'texte' OpenOffice
QUAND EXCEPTION DANS
// Ajout des paramètres dans le tableau des arguments
TableauAjoute(tabArgs)
tabArgs[1]=pautServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
tabArgs[1]>>Name="Hidden"
tabArgs[1]>>Value=OLEFaux
pautDocument=pautBureau>>LoadComponentFromURL("private:factory/swriter", "_blank", 0, tabArgs)
FAIRE
Info("Impossible de créer un document texte.", "Fermeture du programme")
// Fin du programme
FinProgramme()
FIN

Libérer(tabArgs)

// On positionne le curseur au début du document
pautMonTexte=pautDocument>>Text
pautMonCurseur=pautMonTexte>>createTextCursor
// Ajout de texte au document en mode 'insertion'
pautDocument>>Text>>insertString(pautMonCurseur, "Blabla blablabla bla blabla"+Caract(13)+Caract(13), OLEFaux)

// Création du tableau
pautMonTableau=pautDocument>>createInstance("com.sun.star.text.TextTable")
// Nom du tableau
pautMonTableau>>Name="Tableau01"
// Tableau de 5 lignes et 4 colonnes
pautMonTableau>>initialize(5, 4)
// Insertion du tableau dans le document en mode 'insertion'
pautMonTexte>>insertTextContent(pautMonCurseur, pautMonTableau, Faux)
// Récupération de la largeur du tableau
nLargeurTableau=pautMonTableau>>TableColumnRelativeSum

// Initialisation des séparateurs (pour moduler la largeur des colonnes)
tabSéparateur[1]=pautServiceManager>>Bridge_GetStruct("com.sun.star.text.TableColumnSeparator")
tabSéparateur[1]>>Position=nLargeurTableau*1/4
tabSéparateur[1]>>IsVisible=OLEVrai
tabSéparateur[2]=pautServiceManager>>Bridge_GetStruct("com.sun.star.text.TableColumnSeparator")
tabSéparateur[2]>>Position=nLargeurTableau*3/4
tabSéparateur[2]>>IsVisible=OLEVrai
tabSéparateur[3]=pautServiceManager>>Bridge_GetStruct("com.sun.star.text.TableColumnSeparator")
tabSéparateur[3]>>Position=nLargeurTableau*7/8
tabSéparateur[3]>>IsVisible=OLEVrai

// +-------------------------------------------------------------------------------------
// | Si on exécute la commande 'pautMonTableau>>TableColumnSeparators=tabSéparateur',
// | les colonnes sont bien retaillées, mais il y a plantage systématique de l'application
// | en sortant de la procédure en cours (pb de pile ?).
// |
// | Si le tableau a une taille de 2 éléments au lieu de 3 : les colonnes ne sont pas
// | retaillées et pas de plantage.
// +-------------------------------------------------------------------------------------
// Instauration des largeurs
QUAND EXCEPTION DANS
pautMonTableau>>TableColumnSeparators=tabSéparateur
Transfert(&tabSéparateur[3], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&tabSéparateur[2], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&tabSéparateur[1], &nVariableDeLibération, Dimension(nVariableDeLibération))
FAIRE
Info("Pb.")
FIN

// On déplace le curseur en fin de document, sans étendre la sélection
pautMonCurseur>>gotoEnd(OLEFaux)
// Ajout de texte au document en mode 'insertion'
pautDocument>>Text>>insertString(pautMonCurseur, +Caract(13)+"Bloblo blobloblo blo bloblo", OLEFaux)
// Attente...
Info("Attente...")
// Fermeture d'OpenOffice
pautDocument>>Close(OLEVrai)
Posté le 15 janvier 2010 - 17:47
Merci, je vais regarder.

Je pense que cela va peut-être aider d'autres programmeurs Windev, qui but sur le même problème. :-)
C'est la première fois que je vois ce bout de code dans toutes les recherches que j'ai fait sur le sujet.

Merci, merci, merci

Corinne Bonhomme
Canada
Posté le 15 janvier 2010 - 18:34
Oh, wow... je viens d'appliquer la solution du Transfert() expliqué plus haut.
Et cela ne plante plus :-)

Donc afin que les prochains programmeurs Windev puisse avoir un code qui fonctionne, je transmet le code qui fonctionne chez moi.

J'ai mis la commande Transfert(...) partout où il y avait utilisation de la commande "...>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")" après avoir utiliser la valeur du tableau dynamique éviement, car si je comprend bien, cela doit libérer (ou vider) le tableau dynamique. (voir code ci-dessous)

Merci de m'avoir transmis ton code.
Je vais pouvoir maintenant avancer, car ceci n'est que le début du code.
Il me fallait faire fonctionner cet exemple simple pour continuer.

J'espère que ce sujet servira à d'autres programmeurs :-)

LOCAL
Vl_Url est une chaîne //Chemin du fichier de référence pour le publipostage
Vl_NomSource est une chaîne //Nom de la source de données
Vl_CheminODB est une chaîne //Chemin et nom de la base de données ODB
l_sVl_OutPut est une chaîne
l_sVl_Prefixe est une chaîne
Vl_Fusion est un objet OLE dynamique //Objet MailMerge pour effectuer la fusion
Vl_oDBContexte est un objet OLE dynamique //Objet Database
Vl_uneInstance est un objet OLE dynamique //Instance de base de données
Vl_nomDocBase est un objet OLE dynamique //Base de données
Vl_MyProps est un tableau de 0 Variants //Tableau des Propriétés de MailMerge pour la fusion
Vl_Args est un tableau de 2 objet automation dynamique //Tableau nécessaire aux paramètres du chargement du document de référence ODT
Vl_DbArgs est un tableau de 1 objet automation dynamique //Tableau de paramètres
Vl_InfoBase est un tableau de 5 objet automation dynamique //Propriétés de la base de données

Vg_oServiceManager est un objet OLE dynamique
Vg_oDesktop est un objet OLE dynamique
Vg_oDocument est un objet OLE dynamique

nVariableDeLibération est un entier


//Connection au service OpenOffice
Vg_oServiceManager = allouer un objet OLE ("com.sun.star.ServiceManager")
Vg_oDesktop = Vg_oServiceManager>>createInstance("com.sun.star.frame.Desktop")

//URL du document de référence pour le publipostage
//Vl_Url="file:///P:/Bible/Test.odt"
//Vl_Url=fSélecteur("","","Sélectionnez un document...","Document Word (*.DOC)"+TAB+"*.DOC","DOC",fselOuvre)
Vl_Url = "W:\developpement\Mes Projets\DossierEmploye_OpenOffice\Exe\Modele_Writer.odt"
Vl_Url = "file:///"+Remplace(Vl_Url,"\","/")

//Paramètre de chargement du document : mode caché et en écriture
Vl_Args[1]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_Args[1]>>Name = "Hidden"
Vl_Args[1]>>Value = True
//Vl_Args[1]>>Value = False
Vl_Args[2]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_Args[2]>>Name = "ReadOnly"
Vl_Args[2]>>Value = False


QUAND EXCEPTION DANS
//Chargement du document
Vg_oDocument=Vg_oDesktop>>LoadComponentFromURL(Vl_Url,"_blank",0,Vl_Args) // Ouvre le fichier avec Open Office
Transfert(&Vl_Args[2], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&Vl_Args[1], &nVariableDeLibération, Dimension(nVariableDeLibération))

//Actualisation des liens du document
Vg_oDocument>>updateLinks

//*******************************************
//* Création de la source de données *
//*******************************************
Vl_NomSource="WINDEV"
Vl_oDBContexte = Vg_oServiceManager>>createInstance("com.sun.star.sdb.DatabaseContext")
//vl_CheminODB="File:///P:/BASE.ODB"
Vl_CheminODB="file:///"+Remplace("W:\developpement\Mes Projets\DossierEmploye_OpenOffice\Exe\WINDEV.ODB","\","/")

SI Vl_oDBContexte>>hasByName(Vl_NomSource) ALORS
Vl_oDBContexte>>revokeObject(Vl_NomSource)
FIN

Vl_DbArgs[1] = Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_DbArgs[1]>>Name = "Overwrite"
Vl_DbArgs[1]>>Value = True
Vl_uneInstance = Vl_oDBContexte>>createInstance()
Vl_nomDocBase = Vl_uneInstance>>DatabaseDocument
Vl_nomDocBase>>storeAsURL(Vl_CheminODB,Vl_DbArgs)
Transfert(&Vl_DbArgs[1], &nVariableDeLibération, Dimension(nVariableDeLibération))
//nomDocBase>>info = mNoArgs
Vl_oDBContexte>>registerObject(Vl_NomSource,Vl_uneInstance)
//Vl_uneInstance>>URL="sdbc:flat:File:///D:/Bible"
Vl_uneInstance>>URL="sdbc:flat:File:///"+Remplace("W:\developpement\Mes Projets\DossierEmploye_OpenOffice\Exe","\","/")
Vl_InfoBase[1]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[1]>>Name = "Extension"
Vl_InfoBase[1]>>Value = "txt"
Vl_InfoBase[2]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[2]>>Name = "HeaderLine"
Vl_InfoBase[2]>>Value = True
Vl_InfoBase[3]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[3]>>Name = "FieldDelimiter"
Vl_InfoBase[3]>>Value = TAB
Vl_InfoBase[4]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[4]>>Name = "StringDelimiter"
Vl_InfoBase[4]>>Value = "'" //un guillemet
Vl_InfoBase[5]= Vg_oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Vl_InfoBase[5]>>Name = "DecimalDelimiter"
Vl_InfoBase[5]>>Value = ","
Vl_uneInstance>>Info = Vl_InfoBase
Vl_nomDocBase>>store()
Transfert(&Vl_InfoBase[5], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&Vl_InfoBase[4], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&Vl_InfoBase[3], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&Vl_InfoBase[2], &nVariableDeLibération, Dimension(nVariableDeLibération))
Transfert(&Vl_InfoBase[1], &nVariableDeLibération, Dimension(nVariableDeLibération))

//*******************************************
//* Execution de la fusion *
//*******************************************
Vl_Fusion= Vg_oServiceManager>>createInstance("com.sun.star.text.MailMerge")
Vl_Fusion>>DataSourceName="WINDEV"
//Vl_Fusion>>DocumentURL="file:///P:/Bible/test.odt"
Vl_Fusion>>DocumentURL = Vl_Url
Vl_Fusion>>CommandType=0
Vl_Fusion>>Command="DEE" //nom de la table (fichier .txt)
Vl_Fusion>>OutputType=2 //1=édition, 2=fichier
//Vl_Fusion>>OutputUrl="file:///P:/Archivage/" //Chemin d'enregistrement du document fusionné
Vl_Fusion>>OutputUrl="file:///"+Remplace("W:\developpement\Mes Projets\DossierEmploye_OpenOffice\Exe\","\","/")
Vl_Fusion>>FileNameFromColumn=False
Vl_Fusion>>FilenamePrefix="Fusion.odt" //Nom du document fusionné
Vl_Fusion>>SaveAsSingleFile=True //1 seul fichier
Vl_Fusion>>Execute(Vl_MyProps)
Vl_oDBContexte>>revokeObject(Vl_NomSource)

//Fermeture du document
Vg_oDocument>>Close(OLEVrai)
Vl_nomDocBase>>Close(OLEVrai)
Vl_Fusion>>Dispose()
Vl_oDBContexte>>Dispose()
Vl_uneInstance>>Dispose()

Libérer Vl_Fusion
Libérer Vl_uneInstance
Libérer Vl_oDBContexte

Libérer Vg_oDocument
Libérer Vg_oDesktop
Libérer Vg_oServiceManager
FAIRE
SI Vg_oDocument<>Null ALORS Vg_oDocument>>Close(OLEVrai)
Libérer Vg_oDocument
Libérer Vg_oDesktop
Libérer Vg_oServiceManager
Erreur("Problème lors de la fusion"+RC+ExceptionInfo(errComplet))
FIN

FIN:
Info("Terminé")


Il faut finaliser et rafiner, car j'ai fait plusieurs essai erreur.
Le code dans le "... FAIRE...." est à revoir et vérifier de bien fermer ce qui est ouvert.
Ce que je n'ai pas fait encore car je viens juste de le faire fonctionner sans plantage. Ce code était un test simple pour comprendre le fonctionnement.

Corinne Bonhomme
Canada
Posté le 20 mars 2010 - 20:06
Je comprends à peu près le code présenté.
En revanche, je ne comprends pas d'où viennent tous ces paramètres.
Je cherche une doc Open Office qui les expliquent.
Par exemple:

vl_Args[1]=VgoServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
v1_Args[1]>>Name= "Hidden" // <===== d'où cela vient-il ?
v1_Args[2]>>Value = True

// Je comprends bien ce que cela signifie, mais de quelle documentation vient le mot clef "Hidden"

Merci de m'aider à débuter.
Posté le 10 avril 2010 - 22:05
Pouvez-vous publier la version définitive de votre code. Il y a des choses qui ne fonctionnent pas chez moi
Merci.
Posté le 05 mai 2010 - 00:41
Désolé :-(, je n'ai jamais réussi a résoudre tous les problèmes.
J'ai toujours des problèmes, OpenOffice à l'air de rester bloqué.
La première fois cela marche, mais la deuxième fois, openOffice plante.

Ma boss m'a demandé d'arrêter, le service technique a fini par résoudre leur problème avec Word sous terminal serveur, et mon code de fusion Word fonctionne bien. Donc le besoin de faire de la fusion OpenOffice n'est plus une priorité pour la société.

Bonne chance, j'ai passé plus d'une semaine à plein temps à me casser les dents sur la fusion avec OpenOffice.

Mes connaissances d'OpenOffice ne sont pas suffisante pour comprendre le fonctionnement. je ne suis même pas une utilisatrice d'openOffice en temps normal, alors cela devient difficile de programmer un auotmatisme dans ces conditions.

Bonne chance et désolé de n'avoir pas de solution tout prêt, cela m'aurait fait plaisir de publier une version qui fonctionne.

Corinne Bonhomme
Canada