2008-09-02 10 views

Antwort

9

Ich habe nicht kommen mit einer Lösung bin ich sehr zufrieden mit, aber hier sind einige Hinweise:

  • Q. Was der OO-API für Seriendruck ist?

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

  • F. Welche Selbsthilfegruppen?

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

  • Q. Beispielcode?

    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. Jede weitere Beispiele?

    A. file: /// C: /Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (kommt mit dem SDK)

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

  • Frage: Wie kann ich die Beispiele bauen?

    A. zB für WriterDemo (C: \ Programme \ OpenOffice.org_2.4_SDK \ examples \ CLI \ VB.NET \ WriterDemo)

    1. Fügen Sie Verweise auf alles hier: C: \ Program Files \ OpenOffice.org 2.4 \ Programme \ assembly
    2. das cli_basetypes ist, cli_cppuhelper, cli_types, cli_ure
  • Q. Hat OO die gleiche separaten Daten-/Dokumentendatei für Seriendruck verwenden?

    A. Es ist für eine Reihe von Datenquellen ermöglicht, einschließlich csv-Dateien

  • Q. Does OO können Sie all die verschiedenen Arten (Fax, E-Mail, neue Belegdrucker) fusionieren?

    A. Sie in einem neuen Dokument, drucken fusionieren können und E-Mail

  • F. Können Sie benutzerdefinierte Felder hinzufügen?

    A. Ja

  • Q. Wie erstellen Sie ein neues Dokument in 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) 
    
  • Frage: Wie Sie das Dokument speichern Sie?

    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) 
    
  • Frage: Wie Öffnen Sie das Dokument?

    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) 
    
  • Frage: Wie initiieren Sie einen Seriendruck in VB.Net?

    A.

    1. Weiß nicht. Diese Funktionalität befindet sich in der API-Referenz, fehlt jedoch in der IDL. Wir können leicht verdreht sein. Unter der Annahme, dass die API funktionierte, sieht es so aus, als ob das Ausführen einer Zusammenführung ziemlich einfach ist.

    2. In VBScript:

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

      ‚nun eine neue MailMerge mit den Einstellungen aus diesem Dokument extrahiert einrichten Set oMailMerge = objServiceManager.createInstance ("com.sun.star.text.MailMerge")

      oMailMerge.DocumentURL = "file: /// C:/Users/me/Desktop/Openoffice Investigation/mail merged.odt" oMailMerge .DataSourceName = "fügt" hinzu oMailMerge.CommandType = 0 'http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#CommandType oMailMerge.Command = "fügt hinzu:" oMailMerge.OutputType = 2' http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html#OutputType oMailMerge.execute (Array())

    3. In 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. das gleiche, aber mit Option Strict On (funktioniert nicht)

      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

Verwenden Sie keine Reflektion in .NET, um eine Instanz von MailMerge zu erstellen. Ich hatte dies auch basierend auf dieser Antwort getan und während es für das Zusammenführen mit einer Datei funktionierte, konnte der Versuch, durch Festlegen der PrintOptions-Eigenschaft mit dem Drucker zusammenzuführen, mit einer variantToAny-Konvertierungsausnahme fehlschlagen. Der richtige Weg scheint die Rückgabe des getServiceManager() des Kontextes als XMultiComponentFactory zu sein, dann den Aufruf von createInstanceWithContext ("com.sun.star.text.MailMerge", Kontext), um ein MailMerge-Objekt zu erzeugen. Legen Sie das als XPropertySet fest, und legen Sie die Eigenschaften von MailMerge mit den XPropertySet-Methoden fest. – rgonet

+0

Auch wenn Sie hier keine Spiegelung verwenden sollten, liegt es daran, dass Sie beim Übergeben des falschen Arguments die Zeile übergeben, bei der die Nichtübereinstimmung des Typkonflikts mit dem Aufruf von Execute ausgelöst wurde. Die Execute-Methode von XJob erfordert die Übergabe einer Sequenz von NamedValue-Objekten. Das bedeutet, dass Sie ein neues Objekt [] {new NamedValue [] {}} übergeben müssen und nicht nur ein neues Objekt [] {}. – rgonet

Verwandte Themen