ich erstelle in VB ein Writer Dokument im Hintergrund, dann werden Texte eingefügt und schluss endlich soll das Dokument fertig angezeigt werden.
Bis lang mache ich das so:
Code: Alles auswählen
Option Explicit
Sub OOCreateDocument()
Dim oo_doc As Variant
Set oo_doc = OOAddDocument(Nothing, "")
' ....
' i do something
' ...
' !!! open document !!!
End Sub
Private Function OOMakePropertyValue(oo_sm As Variant, _
cName, _
uValue) As Variant
Dim oServiceManager As Variant
Dim oStruct As Variant
If IsEmpty(oo_sm) Then
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
ElseIf oo_sm Is Nothing Then
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Else
Set oServiceManager = oo_sm
End If
Set oStruct = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
oStruct.Name = cName
oStruct.Value = uValue
Set OOMakePropertyValue = oStruct
If Not (IsEmpty(oServiceManager)) Then Set oServiceManager = Nothing
If Not (IsEmpty(oStruct)) Then Set oStruct = Nothing
End Function
Private Function OOAddDocument(ByVal oo_tmpdesk As Variant, _
ByVal str_templatefilepath As String) As Variant
Dim avar_openarguments() As Variant
Dim oo_doc As Variant
Dim oo_desk As Variant
Dim oo_sm As Variant
' ### initialize ###
Set OOAddDocument = Nothing
' ### add document ###
' desktop instance
If oo_tmpdesk Is Nothing Then
Set oo_sm = CreateObject("com.sun.star.ServiceManager")
Set oo_desk = oo_sm.createInstance("com.sun.star.frame.Desktop")
Else
Set oo_desk = oo_tmpdesk
End If
' open parameters
ReDim avar_openarguments(0)
Set avar_openarguments(0) = OOMakePropertyValue(oo_sm, "Hidden", True)
If Not (str_templatefilepath = "") Then
ReDim Preserve avar_openarguments(UBound(avar_openarguments) + 1)
Set avar_openarguments(UBound(avar_openarguments)) = _
OOMakePropertyValue(oo_sm, "AsTemplate", True)
Else
str_templatefilepath = "private:factory/swriter"
End If
' open document
Set oo_doc = oo_desk.loadComponentFromURL(str_templatefilepath, _
"_blank", 0, avar_openarguments())
' ### return value ###
Set OOAddDocument = oo_doc
' ### terminate ###
terminate:
If Not (IsEmpty(oo_doc)) Then Set oo_doc = Nothing
If Not (IsEmpty(oo_desk)) Then Set oo_desk = Nothing
If Not (IsEmpty(oo_sm)) Then Set oo_sm = Nothing
End Function
Diese ruft die Funktion "OOAddDocument" auf, die mir ein Dokument im Hintergrund erstellt und dann dessen Objekt zurückgibt.
Danach sollen Textbausteine eingefügt werden und das Dokument angezeigt werden. Möglichst ohne es extra zu speichern.
Geht das?
Gruß
Johnson