2008-09-02 2 views

ответ

9

Я не придумал решение, я очень доволен, но вот некоторые примечания:

  • Q. Что такое OO API для слияния почты?

    А. http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html

  • группы Q. Какая поддержка?

    А. http://user.services.openoffice.org/en/forum/viewforum.php?f=20

  • Q. Пример код?

    А. 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

  • Q. Любые другие примеры?

    A. Файл: /// C: /Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (поставляется с SDK)

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

  • Q. Как построить примеры?

    A. например, для WriterDemo (C: \ Program Files \ OpenOffice.org_2.4_SDK \ Примеры \ CLI \ VB.NET \ WriterDemo)

    1. Добавить ссылки на все здесь: C: \ Program Files \ OpenOffice.org 2.4 \ программа \ сборка
    2. это cli_basetypes, cli_cppuhelper, cli_types, cli_ure
  • Q. есть ли использовать один и тот же OO отдельные данные/файл документа для слияния почты?

    A. Это позволяет для различных источников данных, включая файлы CSV

  • Q. ли OO позволяет объединить все различные тип (факс, электронную почту, новый документ принтер)?

    A. Вы можете объединить в новый документ, печать и электронной почте

  • Q. Вы можете добавить пользовательские поля?

    A. Да

  • Q. Как создать новый документ в 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) 
    
  • Q. Как сохранить документ?

    А.

     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. Как открыть документ?

    А.

     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?

    А.

    1. Не знаю. Эта функциональность находится в ссылке API, но отсутствует в IDL. Мы можем быть слегка привинчены. Предполагая, что API работает, похоже, что слияние довольно просто.

    2. В VBScript:

      Set objServiceManager = WScript.CreateObject ("com.sun.star.ServiceManager")

      «Теперь создать новый MailMerge, используя настройки, извлеченные из этого документ Set oMailMerge = objServiceManager.createInstance ("com.sun.star.text.MailMerge")

      oMailMerge.DocumentURL = "файл: /// C:/Users/мне/Desktop/OpenOffice Исследование/почта 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 (Array())

    3. В VB.Net (Option 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. То же самое, но с 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 
      
+0

Не используйте отражение в .NET для создания экземпляра MailMerge. Я тоже делал это на основе этого ответа, и, хотя он работал для слияния с файлом, попытка слияния с принтером путем установки свойства PrintOptions завершилась неудачей с исключением варианта преобразования варианта преобразования. Правильный способ, похоже, заключается в возврате getServiceManager() в контексте XMultiComponentFactory, а затем вызывает createInstanceWithContext («com.sun.star.text.MailMerge», контекст) для создания объекта MailMerge. Передайте это как XPropertySet и установите свойства MailMerge с помощью методов XPropertySet. – rgonet 2015-12-16 01:33:45

Смежные вопросы