Neues Writer Dokument nächträglich anzeigen lassen (VB)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Johnson
Beiträge: 6
Registriert: Fr, 24.11.2006 12:43

Neues Writer Dokument nächträglich anzeigen lassen (VB)

Beitrag von Johnson »

Hallo zusammen,

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
Die Methode "OOCreateDocumnet" wird vom User aufgerufen.
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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Neues Writer Dokument nächträglich anzeigen lassen (VB)

Beitrag von komma4 »

Soviel ich weiss geht das nicht (Stand 2005, vielleicht geht's mit der 2.1?)
http://www.oooforum.org/forum/viewtopic.phtml?t=27567

Ist unschön...
OTOH
a) dauert die Erstellung eines 600 Seiten Dokuments weniger als 3 Sekunden hier*
b) kannst Du das Dokument sichtbar erzeugen, dann direkt verbergen :-)

Viel Erfolg


* SuSE Linux 9.3, Notebook Pentium M, auf 800MHz getaktet, 1GB RAM, Makro: BTL
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Danach sollen Textbausteine eingefügt werden und das Dokument angezeigt werden. Möglichst ohne es extra zu speichern.
Geht das?
Kommt auf die Version von OOo an. In den 1.1.x-Versinen geht es sicher nicht, in der 2.0.2 hingegen sollte es gehen, ich vermute es geht ab 2.0.2 in allen Versionen, ggf. in allen Versionen ab 2.0:

Code: Alles auswählen

oo_doc.currentcontroller.Frame.containerwindow.Visible = True



siehe:
viewtopic.php?t=9098&highlight=hidden



Gruß
Stephan
Antworten