Ich brauche einen einfachen Seriendruck in OpenOffice mit C++, VBScript, VB.Net oder C# über OLE oder native API. Gibt es gute Beispiele?Wie man einen einfachen Seriendruck in OpenOffice macht
Antwort
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
Q. Jede weitere Beispiele?
A. file: /// C: /Program%20Files/OpenOffice.org_2.4_SDK/examples/examples.html (kommt mit dem SDK)
Frage: Wie kann ich die Beispiele bauen?
A. zB für WriterDemo (C: \ Programme \ OpenOffice.org_2.4_SDK \ examples \ CLI \ VB.NET \ WriterDemo)
- Fügen Sie Verweise auf alles hier: C: \ Program Files \ OpenOffice.org 2.4 \ Programme \ assembly
- 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.
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.
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())
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]() {})
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
Sie sollten einen Blick auf Apache OpenOffice API werfen. Ein Projekt zum Erstellen einer API für Open Office. Einige Sprachen, die sie unterstützen sollen, sind: C++, Java, Python, CLI, StarBasic, JavaScript und OLE.
- 1. Wie macht man einen einfachen Kommandozeilen-Chat in Python?
- 2. macht einen einfachen jQuery Slider
- 3. Wie man einen Sinuswellenkreis in GLSL macht
- 4. Wie man einen Multivektor in C++ macht
- 5. Seriendruck mit Open Office von C# .NET
- 6. AngularJS - Wie macht man einen ziehbaren Baum?
- 7. Wie man einen SKNode zu UIImage macht
- 8. Wie macht man einen UISplitViewController im Hochformat?
- 9. Wie macht man einen zusammengesetzten Schlüssel einzigartig?
- 10. Wie man einen benutzerdefinierten jquery Kalender macht ...............?
- 11. Wie man einen "leeren" RSS-Feed macht
- 12. Wie macht man einen transparenten Farbverlauf?
- 13. wie man einen Singlet Dialog macht
- 14. Wie macht man einen div-Clip sichtbar?
- 15. Wie macht man einen Preprozessor gierig?
- 16. Wie macht man einen Mod-Rewrite dafür?
- 17. Wie man einen Facebook-ähnlichen Chat macht
- 18. C#, wie macht man einen Bildhintergrund transparent?
- 19. Axure: Wie macht man einen kreisförmigen Timer?
- 20. SQL - Wie man einen bedingten INSERT macht
- 21. Wie macht man einen reibungslosen Kamera-Algorithmus?
- 22. WPF: Wie man einen Knopfhintergrund transparent macht
- 23. Wie macht man einen ausführbaren Phar?
- 24. Wie macht man einen Screenshot einer Webseite?
- 25. Wie man einen TextView Text vertikal macht
- 26. Wie macht man einen Neustart mit Unicorn?
- 27. Wie man einen einfachen ziehbaren Marker in OpenLayers erstellt
- 28. Wie schreibt man einen einfachen .txt-Content-Prozessor in XNA?
- 29. Wie schreibt man einen einfachen WYSIWYG-Editor in JavaScript?
- 30. Wie man Versprechungen in IE11 macht
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
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