2017-11-08 1 views
1

다음 코드 블록은 OpenOffice SDK에서 편지 병합 기능을 자동화하기 위해 완벽하게 작동합니다. 코드 위편지함을 사용하여 Libre Office와 병합합니다.

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 

는 내가 그것을 사용하려고 지금 때 이미 무료 무료 office.But에 등록 된 데이터 소스에 데이터를 삽입하는 데 사용됩니다, 라인 oServiceManager = CreateObject("com.sun.star.ServiceManager") 오류 "오류 만들기 ActiveX 객체"를 생성합니다. 누구나 아이디어가 있습니까, 어떻게 수정합니까?

+0

나는 위의 code.'m_xContext = uno.util.Bootstrap.bootstrap() mxMSFactory = DirectCast (m_xContext.getServiceManager(), XMultiServiceFactory) databaseContext = mxMSFactory.createInstance ("이 com.sun에 다음과 같은 수정을 수행 한 .star.sdb.DatabaseContext ") Dim databaseNames As container.XNameAccess = DirectCast (databaseContext, container.XNameAccess) oDB = 데이터베이스 이름 .getByName (nameOfdDtaource)'. 이제 런타임 오류가 발생합니다 "공용 멤버 'getConnection'형식의 '모든'찾을 수 없습니다." –

+0

만약'oDB = databaseNames.getByName (nameOfdDource)을 oDB = DirectCast (databaseOnder.getByName (nameOfdDtaource), XDat aSource)로 변경하면 'Any'타입의 값을 'XDataSource'로 변환 할 수 없습니다. –

답변

0

이 코드는 제대로 보이지 않으므로이 코드는 효과가 있습니다. 다른 예에서는 항상 bootstrap() 줄이 먼저 나타납니다. 그런 다음 별도의 oServiceManager 변수 대신 해당 서비스 관리자를 사용하십시오.

예를 들어 Java 코드 https://www.openoffice.org/udk/common/man/spec/transparentofficecomponents.html을 참조하십시오.

편집 :

당신은 거의 다 왔어. getByName() 메서드는 uno.Any을 반환하며 Value이라는 DirectCast이라는 속성을 사용할 수 있습니다.

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

고마워요. 작동합니다! –

+0

이 기능을 64 비트 Libre Office에 구현하고 싶습니다. cli_cppuhelper Version = 0.0.0.0이 포함 된 LibreOffice_5.4_SDK를 다운로드했습니다. 실행하면 다음 오류가 발생합니다 'cli_cppuhelper, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = ce2cb7e279207b9e'또는 해당 종속성 중 하나를로드 할 수 없습니다. 잘못된 형식의 프로그램을로드하려고했습니다. –

+0

새로운 질문이되어야합니다. 필자는 반드시 VB.NET 및 CLR 용 태그를 포함해야합니다. 필자는 이러한 주제에 대한 전문가가 아니기 때문입니다. 또한, 다운로드 된 버전의 특징을 언급하십시오 - SDK와 응용 프로그램 모두 64 비트입니까? 관련된 Visual Studio 설정도 언급하십시오. –

관련 문제