c# - wps - combinar correspondencia en writer openoffice
Cómo hacer una simple combinación de correspondencia en OpenOffice (2)
Necesito hacer una simple combinación de correspondencia en OpenOffice usando C ++, VBScript, VB.Net o C # a través de OLE o API nativa. ¿Hay algún buen ejemplo disponible?
No he encontrado una solución con la que estoy muy contento, pero aquí hay algunas notas:
P. ¿Qué es la API de OO para la combinación de correspondencia?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
Q. ¿Qué grupos de apoyo?
A. http://user.services.openoffice.org/en/forum/viewforum.php?f=20
Q. Código de muestra?
A. http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
Q. ¿Hay más ejemplos?
A. file: /// C: /Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (viene con el SDK)
Q. ¿Cómo construyo los ejemplos?
A. ej., Para WriterDemo (C: / Archivos de programa / OpenOffice.org_2.4_SDK / examples / CLI / VB.NET / WriterDemo)
- Agregue referencias a todo aquí: C: / Archivos de programa / OpenOffice.org 2.4 / program / assembly
- Eso es cli_basetypes, cli_cppuhelper, cli_types, cli_ure
P. ¿OO utiliza el mismo archivo de datos / documentos por separado para la combinación de correspondencia?
A. Permite una variedad de fuentes de datos que incluyen archivos csv
P. ¿OO le permite fusionarse con todos los tipos diferentes (fax, correo electrónico, nueva impresora de documentos)?
A. Puedes unirte a un documento nuevo, imprimirlo y enviarlo por correo electrónico
Q. ¿Puede agregar campos personalizados?
A. Sí
P. ¿Cómo se crea un nuevo documento en 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. ¿Cómo se guarda el documento?
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. ¿Cómo se abre el documento?
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)
P. ¿Cómo se inicia una combinación de correspondencia en VB.Net?
A.
No lo se Esta funcionalidad está en la referencia de la API, pero falta en el IDL. Podemos estar ligeramente jodidos. Suponiendo que la API funcionara, parece que ejecutar una fusión es bastante simple.
En VBScript:
Establecer objServiceManager = WScript.CreateObject ("com.sun.star.ServiceManager")
''Ahora configure un nuevo MailMerge usando la configuración extraída de ese documento Set oMailMerge = objServiceManager.createInstance ("com.sun.star.text.MailMerge")
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 (Array ())
En VB.Net (Opción estricta desactivada)
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]() {})
Lo mismo, pero con Option Strict On (no funciona)
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
Deberías echar un vistazo a la API de Apache OpenOffice . Un proyecto para crear una API para Open Office. Algunos de los idiomas que dijeron que admiten son: C ++, Java, Python, CLI, StarBasic, JavaScript y OLE.