我需要使用 C++、VBScript、VB.Net 或 C# 通过 OLE 或本机 API 在 OpenOffice 中进行简单的邮件合并。有什么好的例子吗?
我还没有想出一个令我非常满意的解决方案,但这里有一些注意事项:
-
问:什么是用于邮件合并的 OO API?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html 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 http://user.services.openoffice.org/en/forum/viewforum.php?f=20
-
问:示例代码?
A.
-
问:还有更多例子吗?
A. file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html(SDK 附带)
http://www.oooforum.org/forum/viewtopic.phtml?p=94970 http://www.oooforum.org/forum/viewtopic.phtml?p=94970
-
问:如何构建示例?
A. 例如,对于 WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\examples\CLI\VB.NET\WriterDemo)
- 添加对此处所有内容的引用:C:\Program Files\OpenOffice.org 2.4\program\ assembly
- 即cli_basetypes、cli_cppuhelper、cli_types、cli_ure
-
问:OO 是否使用相同的单独数据/文档文件进行邮件合并?
A. 它允许一系列数据源,包括 csv 文件
-
问:OO 是否允许您合并到所有不同类型(传真、电子邮件、新文档打印机)?
A. 您可以合并到新文档、打印并通过电子邮件发送
-
问:您可以添加自定义字段吗?
A. Yes
-
问:如何在 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")
'现在使用从该文档中提取的设置设置一个新的 MailMerge
设置 oMailMerge = objServiceManager.createInstance("com.sun.star.text.MailMerge")
oMailMerge.DocumentURL = "file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt"
oMailMerge.DataSourceName = "添加"
oMailMerge.CommandType = 0 'http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandTypeoMailMerge.Command = "添加"
oMailMerge.OutputType = 2 'http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)