2017-11-08 2 views
1

Ich habe folgenden Code-Block, der perfekt für OpenOffice SDK funktioniert, um Seriendruck-Funktionalität zu automatisieren.Seriendruck mit Libre Office mit .net

Public Function runQueryOnDataSource(ByVal nameOfdDtaource As String, ByVal query As String) As Boolean 
    strLog = strLog + vbCrLf + Now.ToString() + ": runQueryOnDataSource nameOfdDtaource:" + nameOfdDtaource + ",query:" + query + "-Started" 
    Dim oDB As Object, oBase As Object 
    Dim oStatement As Object 
    Dim rSQL As String 
    Dim oRequete As Object 
    Dim oServiceManager As Object, CreateUnoService As Object 
    Try 
     'Creation instance Open office 
     oServiceManager = CreateObject("com.sun.star.ServiceManager") 
     CreateUnoService = oServiceManager.createInstance("com.sun.star.sdb.DatabaseContext") 
     mxMSFactory = (uno.util.Bootstrap.bootstrap()).getServiceManager() 
     oDB = CreateUnoService.getByName(nameOfdDtaource) 'oDB=XDataSource 
     'Connection 
     oBase = oDB.getConnection("", "") 'oBase=XConnection 
     oStatement = oBase.createStatement 'XStatement 
     'rSQL = "SELECT * FROM ""26_MailMergeResult_DEMO" 
     rSQL = query 
     oRequete = oStatement.execute(rSQL) 
     Return True 
    Catch ex As Exception 
     strLog = strLog + vbCrLf + Now.ToString() + ": Exception" + ex.ToString() 
     Throw ex 
    Finally 
     oDB = Nothing 
     oBase.Close() 
     oBase.Dispose() 
    End Try 
    strLog = strLog + vbCrLf + Now.ToString() + ": runQueryOnDataSource-Finished" 
    Return True 
End Function 

Above-Code verwendet wird, um Daten in die Datasource mit libre office.But nun bereits registriert einfügen, wenn ich versuche, es zu benutzen, Zeile oServiceManager = CreateObject("com.sun.star.ServiceManager") erzeugt Fehler „Fehler beim Erstellen der ActiveX-Objekt“. Hat jemand eine Idee, wie ich das beheben kann.

+0

Ich habe folgende Modifikation vorgenommen dem obigen code.'m_xContext uno.util.Bootstrap.bootstrap =() = mxMSFactory Direct (m_xContext.getServiceManager(), XMultiServiceFactory) databaseContext = mxMSFactory.createInstance ("com.sun .star.sdb.DatabaseContext ") Dim databaseNames Als container.XNameAccess = DirectCast (databaseContext, container.XNameAccess) oDB = databaseNames.getByName (nameOfdDtaource)'. Jetzt bekomme ich den Laufzeitfehler "Öffentliches Mitglied 'getConnection' vom Typ 'Any' not found." –

+0

Ein Wenn ich 'oDB = databaseNames.getByName (nameOfdDtaource) in oDB = DirectCast (databaseNames.getByName (nameOfdDtaource), XDat aSource)' I get "Wert des Typs 'Any' kann nicht in 'XDataSource' konvertiert werden". –

Antwort

0

Dieser Code sieht nicht richtig aus, also bin ich überrascht, dass es jemals funktioniert hat. In anderen Beispielen geht die bootstrap() Zeile immer zuerst. Verwenden Sie dann diesen Service Manager anstelle einer separaten Variablen oServiceManager.

Siehe zum Beispiel den Java-Code unter https://www.openoffice.org/udk/common/man/spec/transparentofficecomponents.html.

EDIT:

Sie sind fast da. Die getByName()-Methode gibt uno.Any zurück, die eine Value genannte Eigenschaft hat, die DirectCast verwenden kann.

Dim oDB As XDataSource 
Dim oBase As XConnection = Nothing 
Dim xContext As XComponentContext = uno.util.Bootstrap.bootstrap() 
Dim xMSFactory As XMultiServiceFactory = DirectCast(
    xContext.getServiceManager(), XMultiServiceFactory) 
Dim xNameAccess As XNameAccess = DirectCast(
    xMSFactory.createInstance("com.sun.star.sdb.DatabaseContext"), XNameAccess) 
oDB = DirectCast(xNameAccess.getByName("Bibliography").Value, XDataSource) 
oBase = DirectCast(oDB.getConnection("", ""), XConnection) 
+0

Vielen Dank. Es funktioniert !! –

+0

Ich möchte diese Funktionalität für 64-Bit-Libre Office implementieren. Ich habe LibreOffice_5.4_SDK heruntergeladen, die cli_cppuhelper Version = 0.0.0.0 enthält. Wenn ich ausführe, bekomme ich folgenden Fehler Konnte Datei oder Assembly nicht laden 'cli_cppuhelper, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = ce2cb7e279207b9e' oder eine seiner Abhängigkeiten. Es wurde versucht, ein Programm mit einem falschen Format zu laden. –

+0

Das sollte eine neue Frage sein. Stellen Sie sicher, dass Sie Tags für VB.NET und CLR hinzufügen, da ich nicht unbedingt ein Experte für diese Themen bin. Erwähnen Sie auch heruntergeladene Versionsspezifikationen - sind sowohl das SDK als auch die App 64-Bit? Erwähnen Sie auch relevante Visual Studio-Einstellungen. –

Verwandte Themen