كيفية القيام بدمج بريد بسيط في OpenOffice
-
09-06-2019 - |
سؤال
أحتاج إلى إجراء عملية دمج بريد بسيطة في OpenOffice باستخدام C++ أو VBScript أو VB.Net أو C# عبر OLE أو API الأصلية.هل هناك أي أمثلة جيدة متاحة؟
المحلول
لم أتوصل إلى حل يسعدني حقًا ولكن إليك بعض الملاحظات:
س.ما هو 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
س.هل هناك المزيد من الأمثلة؟
أ.file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (يأتي مع SDK)
س.كيف أقوم ببناء الأمثلة؟
أ.على سبيل المثال، لـ WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\examples\CLI\VB.NET\WriterDemo)
- أضف مراجع إلى كل شيء هنا:C:\ملفات البرنامج\OpenOffice.org 2.4\program\assembly
- وهذا هو 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)
س.كيف تبدأ عملية دمج البريد في VB.Net؟
أ.
لا أعرف.هذه الوظيفة موجودة في مرجع API ولكنها مفقودة من IDL.قد نكون ثمل قليلا.بافتراض أن واجهة برمجة التطبيقات (API) كانت تعمل، يبدو أن تشغيل الدمج أمر بسيط إلى حد ما.
في فب سكريبت:
تعيين objServiceManager = WScript.CreateObject("com.sun.star.ServiceManager")
"الآن قم بإعداد mailmerge جديد باستخدام الإعدادات المستخرجة من ذلك المستند مجموعة Omailmerge = objservicemanager.createinstance (" com.sun.star.text.mailmerge ")
omailmerge.documenturl = "file: /// c:/user/me/desktop/openOffice Investigation/mail muser.odt" omailmerge.datasourcename = "adds" omailmerge.commandtype = 0 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandTypeomailmerge.command = "adds" omailmerge.outputType = 2 ' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputTypeoMailMerge.execute(Array())
في VB.Net (الخيار Strict Off)
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.مشروع لإنشاء API لـ Open Office.بعض اللغات التي قالوا إنها تدعمها هي:C++، وJava، وPython، وCLI، وStarBasic، وJavaScript، وOLE.