如何在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