如何在 OpenOffice 中进行简单的邮件合并
-
09-06-2019 - |
题
我需要使用 C++、VBScript、VB.Net 或 C# 通过 OLE 或本机 API 在 OpenOffice 中进行简单的邮件合并。有什么好的例子吗?
解决方案
我还没有想出一个令我非常满意的解决方案,但这里有一些注意事项:
问。用于邮件合并的 OO API 是什么?
A。 http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
问。有哪些支持团体?
A。 http://user.services.openoffice.org/en/forum/viewforum.php?f=20
问。示例代码?
A。 http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
问。还有更多例子吗?
A。file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html(随 SDK 一起提供)
问。如何构建示例?
A。例如,对于 WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\examples\CLI\VB.NET\WriterDemo)
- 添加对此处所有内容的引用:C:\ Program Files \ OpenOffice.org 2.4 \程序\程序集
- 即cli_basetypes、cli_cppuhelper、cli_types、cli_ure
问。OO 是否使用相同的单独数据/文档文件进行邮件合并?
A。它允许一系列数据源,包括 csv 文件
问。OO 是否允许您合并到所有不同类型(传真、电子邮件、新文档打印机)?
A。您可以合并到新文档、打印和通过电子邮件发送
问。可以添加自定义字段吗?
A。是的
问。如何在 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)
问。你如何保存文档?
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)
问。您如何打开该文档?
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)
问。如何在 VB.Net 中启动邮件合并?
A。
不知道。API 参考中有此功能,但 IDL 中缺少此功能。我们可能有点搞砸了。假设 API 正常工作,那么运行合并看起来相当简单。
在 VBScript 中:
设置 objServiceManager = WScript.CreateObject("com.sun.star.ServiceManager")
“现在使用从该文档集中提取的设置OMAILMERGE = objServiceManager.CreateinStance设置新的MailMerge(“ com.sun.star.star.text.mailmerge”)
omailmerge.documenturl =“ file:/// c:/users/me/me/desktop/openoffice Revigitation/mail merged.odt” omailmerge.datasourcename =” adds adds'omailmerge.commandType = 0' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandTypeomailmerge.command =“ add” omailmerge.outputtype = 2' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputTypeoMailMerge.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]() {})
同样的事情,但使用 Option Strict On (不起作用)
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
其他提示
你应该看看 Apache OpenOffice API. 。用于为 Open Office 创建 API 的项目。他们表示支持的几种语言是:C++、Java、Python、CLI、StarBasic、JavaScript 和 OLE。