如何在OpenOffice中进行简单的邮件合并
时间:2020-03-05 18:46:15 来源:igfitidea点击:
我需要在OpenOffice中使用C ++,VBScript,VB.Net或者Cvia OLE或者本机API进行简单的邮件合并。有没有好的例子?
解决方案
回答
我们应该看一下Apache OpenOffice API。用于为Open Office创建API的项目。他们说支持的几种语言是:C ++,Java,Python,CLI,StarBasic,JavaScript和OLE。
OpenOffice中邮件合并的Java示例。
回答
我还没有想出我真的很满意的解决方案,但是这里有一些注意事项:
- 问:什么是用于邮件合并的OO API?答:http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
- 问:哪些支持团体?答:http://user.services.openoffice.org/en/forum/viewforum.php?f=20
- 问:示例代码?答:http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778 http://user.services.openoffice.org/en/forum /viewtopic.php?f=20&t=8088&p=38017&hilit=mail+merge#p38017
- 问:还有更多示例吗? A. file:/// C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html(SDK附带)http://www.oooforum.org/forum/viewtopic.phtml?p=94970
- 那就是cli_basetypes,cli_cppuhelper,cli_types,cli_ure
- 问:OO是否使用相同的单独数据/文档文件进行邮件合并?答:它允许一系列数据源,包括csv文件
- 问:OO是否允许我们合并到所有不同的类型(传真,电子邮件,新文档打印机)?答:我们可以合并到新文档,打印和发送电子邮件
- 问:我们可以添加自定义字段吗?答:是的
- 问:如何在VB.Net中创建新文档?一种。
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)
- 问:如何保存文档?一种。
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)
- 问:如何打开文档?一种。
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)
- 在VBScript中:Set objServiceManager = WScript.CreateObject(" com.sun.star.ServiceManager")'现在使用从该文档提取的设置来设置新的MailMerge设置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 ="添加" oMailMerge.OutputType = 2'http://api.openoffice.org/docs/common/ref /com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(Array())
- 在VB.Net中(选项严格关闭)
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]() {})
- 同样的事情,但选项严格启用(不起作用)
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