سؤال

أحتاج إلى إجراء عملية دمج بريد بسيطة في 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

    http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=8088&p=38017&hilit=mail+merge#p38017

  • س.هل هناك المزيد من الأمثلة؟

    أ.file:///C:/Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (يأتي مع SDK)

    http://www.oooforum.org/forum/viewtopic.phtml?p=94970

  • س.كيف أقوم ببناء الأمثلة؟

    أ.على سبيل المثال، لـ WriterDemo (C:\Program Files\OpenOffice.org_2.4_SDK\examples\CLI\VB.NET\WriterDemo)

    1. أضف مراجع إلى كل شيء هنا:C:\ملفات البرنامج\OpenOffice.org 2.4\program\assembly
    2. وهذا هو 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؟

    أ.

    1. لا أعرف.هذه الوظيفة موجودة في مرجع API ولكنها مفقودة من IDL.قد نكون ثمل قليلا.بافتراض أن واجهة برمجة التطبيقات (API) كانت تعمل، يبدو أن تشغيل الدمج أمر بسيط إلى حد ما.

    2. في فب سكريبت:

      تعيين 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())

    3. في 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]() {})
      
    4. نفس الشيء ولكن مع تشغيل الخيار 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.

جافا مثال لدمج البريد في OpenOffice.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top