Einfügen Datei...

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

Moderator: Moderatoren

Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Einfügen Datei...

Beitrag von Hurby »

Hallo,

ich versuche durch Code den Schritt <Einfügen><Datei> auszuführen. bekomme aber den Fehler: "Typen unverträglich". Da ich mit meinem Latein am Ende bin, wollte ich fragen ob Jemand erkennt, wo der Fehler liegt?

Hier mal mein Code:

Code: Alles auswählen

Option Explicit

Dim objServiceManager As Object
Dim objStardesktop As Object
Dim objDispatcher As Object
Dim objDoc As Object
Dim Dummy() As Object

Private Sub Form_Load()

Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objStardesktop = objServiceManager.createinstance("com.sun.star.frame.Desktop")
Set objDoc = objStardesktop.loadComponentfromurl("private:factory/swriter", "_blank", 0, Dummy)
insert
End
End Sub

Private Function MakePropertyValue(Name, Value) As Object
Dim Struct As Object
Set Struct = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Struct.Name = Name
Struct.Value = Value
Set MakePropertyValue = Struct
End Function

Private Function CreateUnoService(ServiceName) As Object
Set CreateUnoService = objServiceManager.createinstance(ServiceName)
End Function

Private Sub insert()
Dim arg(1) As Object
Set objDispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")
Set arg(0) = MakePropertyValue("Name", "file:///C:/gwwincs/Dokument2/GE1.odt")
Set arg(1) = MakePropertyValue("Filter", "writer8")
objDispatcher.executeDispatch objDoc, ".uno:InsertDoc", "", 0, arg()
End Sub
Bin für jeden Tipp dankbar, auch wenn Ihr euch dafür nichts kaufen könnt :-)

MfG Hurby
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Da ich mit meinem Latein am Ende bin, wollte ich fragen ob Jemand erkennt, wo der Fehler liegt?


Ja, daran das Du irgendwo versuchst einzufügen. Ich müßte jetzt erst einmal nachdenken wo, aber das hier:

Code: Alles auswählen

objDispatcher.executeDispatch objDoc, ".uno:InsertDoc", "", 0, arg() 
ist das Einfügen ins 'Dokumentobjekt', also das komplette Dokument (mit z.B. Vorlagen, Eigenschaften, Seiteneinstellungen ...) jedoch nicht der Textbereich/Inhalt des Dokuments/Platz wo der sichtbare Cursor steht ... keine Lust jetzt darüber nachzudenken wie ich das exakt formuliere. Wo Du hinwillst ist aber:

Code: Alles auswählen

objDoc.CurrentController.Frame
also verwende:

Code: Alles auswählen

objDispatcher.executeDispatch objDoc.CurrentController.Frame, ".uno:InsertDoc", "", 0, arg()

sollte eigentlich gehen.


Nö, ist nicht so kompliziert, dispatcher-Aktionen würde ich Dir raten immer einfach mit dem Makrorekorder testweise aufzuzeichnen, dann siehst Du meist schon wo es klemmt ohne die Doku zu bemühen.



Gruß
Stephan
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hallo Hurby,

ich weiß ja nicht was Du genau machen willst aber, es gibt eine Funktion die man in einem Writer-Dokument direkt am Cursor aufrufen kann.

Code: Alles auswählen

  oDoc = StarDesktop.loadComponentFromURL_ ("private:factory/swriter","_blank", 0, mArgs())
  oCURsor = oDoc.text.createtextcursor
  filetoinsert=converttourl("C:\test.odt")
  Dim Dummy(0) as New com.sun.star.beans.PropertyValue
  oCURsor.InsertDocumentFromUrl(FileToInsert,Dummy())

mfg
Michael
Zuletzt geändert von ykcim am Mo, 25.09.2006 13:38, insgesamt 1-mal geändert.
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hurby
**
Beiträge: 46
Registriert: Di, 30.08.2005 10:40

Beitrag von Hurby »

Danke Danke...

Bei Michaels Code bekomme ich bei

Code: Alles auswählen

otext = objDoc.GetText()
den Fehler "Objekt unterstützt diese Eigenschaft oder Methode nicht".

Macht aber nichts denn der Cursor ist ja immer am Anfang des Dokuments, sodass es mit dem Tipp von Stephan geklappt hat.

MfG Hurby
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Sorry, mein Fehler. Zeile einfach streichen. Ich habe den Code aus einem größeren kopiert und die die Zeile ist hier überflüssig.

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Antworten