Comment faire un publipostage simple dans OpenOffice
-
09-06-2019 - |
Question
J'ai besoin de faire un publipostage simple dans OpenOffice à l'aide de C++, VBScript, VB.Net ou C# via OLE ou de l'API native.Existe-il des bons exemples disponibles?
La solution
Je n'ai pas trouver une solution, je suis vraiment heureux avec, mais voici quelques remarques:
Q.Qu'est-ce que l'OO API pour le publipostage?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
Q.Ce que les groupes de soutien?
A. http://user.services.openoffice.org/en/forum/viewforum.php?f=20
Q.Exemple de code?
A. http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
Q.Plus d'exemples?
A.file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (livré avec le kit de développement)
Q.Comment puis-je construire les exemples?
A.par exemple, pour WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\exemples\CLI\VB.NET\WriterDemo)
- Ajouter des références à tout ici:C:\Program Files\OpenOffice.org 2.4\programme\assembly
- C'est cli_basetypes, cli_cppuhelper, cli_types, cli_ure
Q.Ne OO utiliser le même séparé de données/fichier de document de fusion et publipostage?
A.Il permet une gamme de sources de données, y compris les fichiers csv
Q.Ne OO vous permettent de fusionner pour tous les différents types (fax, e-mail, un nouveau document de l'imprimante)?
A.Vous pouvez fusionner vers un nouveau document, l'imprimer et e-mail
Q.Vous pouvez ajouter des champs personnalisés?
A.Oui
Q.Comment voulez-vous créer un nouveau document dans VB.Net?
A.
Dim xContext As XComponentContext xContext = Bootstrap.bootstrap() Dim xFactory As XMultiServiceFactory xFactory = DirectCast(xContext.getServiceManager(), _ XMultiServiceFactory) 'Create the Desktop Dim xDesktop As unoidl.com.sun.star.frame.XDesktop xDesktop = DirectCast(xFactory.createInstance("com.sun.star.frame.Desktop"), _ unoidl.com.sun.star.frame.XDesktop) 'Open a new empty writer document Dim xComponentLoader As unoidl.com.sun.star.frame.XComponentLoader xComponentLoader = DirectCast(xDesktop, unoidl.com.sun.star.frame.XComponentLoader) Dim arProps() As unoidl.com.sun.star.beans.PropertyValue = _ New unoidl.com.sun.star.beans.PropertyValue() {} Dim xComponent As unoidl.com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL( _ "private:factory/swriter", "_blank", 0, arProps) Dim xTextDocument As unoidl.com.sun.star.text.XTextDocument xTextDocument = DirectCast(xComponent, unoidl.com.sun.star.text.XTextDocument)
Q.Comment voulez-vous enregistrer le document?
A.
Dim storer As unoidl.com.sun.star.frame.XStorable = DirectCast(xTextDocument, unoidl.com.sun.star.frame.XStorable) arProps = New unoidl.com.sun.star.beans.PropertyValue() {} storer.storeToURL("file:///C:/Users/me/Desktop/OpenOffice Investigation/saved doc.odt", arProps)
Q.Comment avez-vous Ouvrez le document?
A.
Dim xComponent As unoidl.com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL( _ "file:///C:/Users/me/Desktop/OpenOffice Investigation/saved doc.odt", "_blank", 0, arProps)
Q.Comment avez-vous lancer un publipostage dans VB.Net?
A.
Ne sais pas.Cette fonctionnalité est dans la référence de l'API, mais manquant de l'IDL.Nous sommes peut-être légèrement vissés.En supposant que l'API travaille, il ressemble à l'exécution d'une opération de fusion est assez simple.
En VBScript:
Ensemble objServiceManager = WScript.CreateObject("com.soleil.étoiles.ServiceManager")
'Maintenant mis en place une nouvelle fusion et Publipostage à l'aide des paramètres extraits à partir de ce doc Ensemble oMailMerge = objServiceManager.createInstance("com.soleil.étoiles.texte.Fusion et publipostage")
oMailMerge.DocumentURL = "file:///C:/Users/moi/Desktop/OpenOffice Enquête/mail fusionné.odt" oMailMerge.DataSourceName = "ajoute" oMailMerge.CommandType = 0' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Command = "ajoute" oMailMerge.Typesortie = 2' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(Array())
Dans VB.Net (Option Strict Off)
Dim t_OOo As Type t_OOo = Type.GetTypeFromProgID("com.sun.star.ServiceManager") Dim objServiceManager As Object objServiceManager = System.Activator.CreateInstance(t_OOo) Dim oMailMerge As Object oMailMerge = t_OOo.InvokeMember("createInstance", _ BindingFlags.InvokeMethod, Nothing, _ objServiceManager, New [Object]() {"com.sun.star.text.MailMerge"}) 'Now set up a new MailMerge using the settings extracted from that doc oMailMerge.DocumentURL = "file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt" oMailMerge.DataSourceName = "adds" oMailMerge.CommandType = 0 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Command = "adds" oMailMerge.OutputType = 2 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(New [Object]() {})
La même chose mais avec Option Strict on (ne fonctionne pas)
Dim t_OOo As Type t_OOo = Type.GetTypeFromProgID("com.sun.star.ServiceManager") Dim objServiceManager As Object objServiceManager = System.Activator.CreateInstance(t_OOo) Dim oMailMerge As Object oMailMerge = t_OOo.InvokeMember("createInstance", _ BindingFlags.InvokeMethod, Nothing, _ objServiceManager, New [Object]() {"com.sun.star.text.MailMerge"}) 'Now set up a new MailMerge using the settings extracted from that doc oMailMerge.GetType().InvokeMember("DocumentURL", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt"}) oMailMerge.GetType().InvokeMember("DataSourceName", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"adds"}) oMailMerge.GetType().InvokeMember("CommandType", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {0}) oMailMerge.GetType().InvokeMember("Command", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {"adds"}) oMailMerge.GetType().InvokeMember("OutputType", BindingFlags.SetProperty, Nothing, oMailMerge, New [Object]() {2}) oMailMerge.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod Or BindingFlags.IgnoreReturn, Nothing, oMailMerge, New [Object]() {}) ' this line fails with a type mismatch error
Autres conseils
Vous devriez jeter un oeil à Apache OpenOffice API.Un projet de création d'une API pour Open Office.Un petit nombre de langues qu'ils ont dit à l'appui sont les suivants:C++, Java, Python, CLI, StarBasic, JavaScript et OLE.