2008-09-02 117 views

回答

9

我還沒有想出了一個解決方案,我很快樂的事情,但這裏有一些注意事項:

  • 問:什麼是郵件合併OO API?

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

  • 問:示例代碼?

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

  • 問:如何建立例子?

    A.例如,對於WriterDemo(C:\ Program Files文件\ OpenOffice.org_2.4_SDK \例子\ CLI \ VB.NET \ WriterDemo)

    1. 添加對一切都在這裏:C:\ PROGRAM文件\ OpenOffice.org 2.4 \程序\裝配
    2. 也就是說cli_basetypes,cli_cppuhelper,cli_types,cli_ure
  • 問:OO使用郵件合併相同的單獨的數據/文檔文件?

    A.它允許範圍內的數據源,包括CSV文件

  • 問:不OO讓你合併所有不同類型(傳真,電子郵件,新的文件打印機)?

    答:您可以合併到一個新文檔,打印和電子郵件

  • 問:你能否添加自定義字段?

    答:是的

  • 問:你如何創建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.

    1. 不知道。此功能位於API參考中,但IDL中缺少該功能。我們可能會稍微擰緊。假設API正在工作,它看起來像運行合併相當簡單。

    2. 在VBScript:

      集objServiceManager = WScript.CreateObject( 「com.sun.star.ServiceManager」)

      「現在設置使用來自DOC 集oMailMerge萃取設置的新郵件合併= objServiceManager.createInstance( 「com.sun.star.text.MailMerge」)

      oMailMerge.DocumentURL = 「文件:/// C:/用戶/我/桌面/ OpenOffice的調查/郵件merged.odt」 oMailMerge .DataSourceName =「adds」 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(陣列())

    3. 在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]() {}) 
      
    4. 同樣的事情,但與選項嚴格開啓(不工作)

      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屬性合併到打印機將失敗,一個variantToAny轉換異常。正確的方法似乎是將上下文的getServiceManager()作爲XMultiComponentFactory返回,然後調用createInstanceWithContext(「com.sun.star.text.MailMerge」,上下文)來創建MailMerge對象。將其作爲XPropertySet進行投射,並使用XPropertySet的方法設置MailMerge的屬性。 – rgonet 2015-12-16 01:33:45