Como fazer uma mala direta simples no OpenOffice
-
09-06-2019 - |
Pergunta
Eu preciso fazer uma simples mala direta no OpenOffice usando C++, VBScript, VB.Net ou C# via OLE ou API nativa.Existem bons exemplos disponíveis?
Solução
Eu não vêm com uma solução que eu estou realmente feliz, mas aqui estão algumas notas:
P.O que é o OO API para mala direta?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
P.O que os grupos de apoio?
A. http://user.services.openoffice.org/en/forum/viewforum.php?f=20
P.Código de exemplo?
A. http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
P.Mais exemplos?
A.file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (vem com o SDK)
P.Como faço para construir os exemplos?
A.por exemplo, para WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\exemplos\CLI\VB.NET\WriterDemo)
- Adicionar referências para tudo aqui:C:\Program Files\OpenOffice.org 2.4\programa\assembly
- Que é cli_basetypes, cli_cppuhelper, cli_types, cli_ure
P.Não OO usar o mesmo separado de dados/arquivo de documento para impressão em série?
A.Ele permite uma gama de fontes de dados, incluindo arquivos csv
P.Não OO permite que você mesclar para todos os tipos diferentes (fax, e-mail, novo documento de impressora)?
A.Você pode mesclar para um novo documento, imprimir e-mail
P.Você pode adicionar campos personalizados?
A.Sim
P.Como você cria um novo documento em 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)
P.Como você salvar o 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)
P.Como você Abrir o 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.Como iniciar uma mala direta no VB.Net?
A.
Não sei.Esta funcionalidade é a referência da API, mas está em falta a partir da IDL.Podemos ser um pouco parafusado.Supondo que a API foi trabalhar, olha como executar uma impressão em série é bastante simples.
No VBScript:
Conjunto objServiceManager = WScript.CreateObject("com.o sol.estrela.ServiceManager")
'Agora configurar uma nova impressão em série utilizando as definições extraídas de que o doc Conjunto oMailMerge = objServiceManager.createInstance("com.o sol.estrela.texto.MailMerge")
oMailMerge.DocumentURL = "file:///C:/Users/me/Desktop/OpenOffice Investigação/mesclada de email.odt" oMailMerge.DataSourceName = "adiciona" oMailMerge.CommandType = 0' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Comando = "adiciona" oMailMerge.OutputType = 2' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.executar(Array())
No 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]() {})
A mesma coisa, mas com Option Strict On (não 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
Outras dicas
Você deve ter um olhar para O Apache OpenOffice API.Um projeto para a criação de uma API para o Open Office.Algumas línguas disseram suporte são:C++, Java, Python, CLI, StarBasic, JavaScript e OLE.