Как выполнить простое слияние почты в OpenOffice
-
09-06-2019 - |
Вопрос
Мне нужно выполнить простое объединение почты в OpenOffice, используя C ++, VBScript, VB.Net или C # через OLE или native API.Есть ли какие-нибудь хорошие примеры в наличии?
Решение
Я не нашел решения, которым был бы действительно доволен, но вот несколько замечаний:
Q.Что такое OO API для слияния почты?
A. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
Q.Какие группы поддержки?
A. http://user.services.openoffice.org/en/forum/viewforum.php?f=20
Q.Пример кода?
A. http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=946&p=3778&hilit=mail+merge#p3778
Q.Есть еще примеры?
A.file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (поставляется вместе с SDK)
Q.Как мне построить примеры?
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
Q.Использует ли OO один и тот же отдельный файл данных / документа для слияния почты?
A.Это позволяет использовать целый ряд источников данных, включая CSV-файлы
Q.Позволяет ли OO объединяться со всеми различными типами (факс, электронная почта, новый принтер для документов)?
A.Вы можете выполнить слияние с новым документом, распечатать его и отправить по электронной почте
Q.Можете ли вы добавить пользовательские поля?
A.ДА
Q.Как создать новый документ в 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)
Q.Как вы сохраняете документ?
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)
Q.Как вы открываете документ?
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)
Q.Как инициировать слияние почты в VB.Net?
A.
Не знаю.Эта функциональность есть в ссылке на API, но отсутствует в IDL.Возможно, мы немного облажались.Предполагая, что API работал, похоже, что запустить слияние довольно просто.
В VBScript:
Установите objServiceManager = WScript.Создайте объект ("com.sun.star.ServiceManager").
Теперь настройте новый почтовый сервер, используя настройки, извлеченные из этого документа Установите oMailMerge = objServiceManager.CreateInstance("com.sun.star.text.MailMerge")
oMailMerge.DocumentURL = "файл:///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 oMailMerge.Command = "добавляет" oMailMerge.OutputType = 2 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute(Массив())
Включено 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]() {})
То же самое, но с включенной опцией Strict (не работает)
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
Другие советы
Вам следует взглянуть на API Apache OpenOffice . Проект по созданию API для Open Office. Они сказали, что поддерживают несколько языков: C ++, Java, Python, CLI, StarBasic, JavaScript и OLE.