Announcement

Collapse
No announcement yet.

OpenOffice (StarOffice)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OpenOffice (StarOffice)

    Hallo,<BR>
    Weiß jemand, ob für OpenOffice, b.z.w. StarOffice<BR>
    eine COM-Schnittstelle o.ä. gibt?<BR>
    <BR>
    Mfg<BR>
    Sigbert Engelhardt

  • #2
    Ja, die gibt es. Diese ist aber grottenschlecht dokumentiert. Hier aber ein kleines Beispiel:<p>
    <pre class="sourcecode"><code>
    <b>unit</b> Unit1;

    <b>interface</b>

    <b>uses</b>
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ComObj;

    <b>type</b>
    TForm1 = <b>class</b>(TForm)
    Button1: TButton;
    Button2: TButton;
    <b>procedure</b> Button1Click(Sender: TObject);
    <b>procedure</b> Button2Click(Sender: TObject);
    <b>private</b>
    <font color="#003399"><i>{ Private-Deklarationen }</i></font>
    <b>public</b>
    Document : Variant;
    StarOffice : Variant;
    <b>function</b> Connect : Boolean;
    <b>function</b> LoadDocument(<b>const</b> FileName : <b>String</b>; Visible : Boolean):Boolean;
    <b>end</b>;

    <b>var</b>
    Form1: TForm1;

    <b>implementation</b>

    <font color="#003399"><i>{$R *.dfm}</i></font>

    <font color="#003399"><i>{ TForm1 }</i></font>

    <b>function</b> TForm1.Connect : Boolean;
    <b>begin</b>
    <b>if</b> VarIsEmpty(StarOffice) <b>then</b>
    StarOffice := CreateOleObject(<font color="#9933CC">'com.sun.star.ServiceManager'</font>);
    Result := <b>not</b>(VarIsEmpty(StarOffice) <b>or</b> VarIsNull(StarOffice))
    <b>end</b>;

    <b>function</b> TForm1.LoadDocument(<b>const</b> FileName : <b>String</b>; Visible : Boolean):Boolean;
    <b>var</b>
    StarDesktop : Variant;
    LoadParams : Variant;
    PropertyValue : Variant;
    CoreReflection : Variant;
    <b>begin</b>
    StarDesktop := StarOffice.Createinstance(<font color="#9933CC">'com.sun.star.frame.Desktop'</font>);

    LoadParams := VarArrayCreate([0,0], varVariant);

    CoreReflection := StarOffice.CreateInstance(<font color="#9933CC">'com.sun.star.reflection.CoreRefle </font>
    ction<font color="#9933CC">');</font>
    CoreReflection.ForName(<font color="#9933CC">'com.sun.star.beans.PropertyValue' </font>).CreateObject(Proper
    tyValue);

    PropertyValue.Name := <font color="#9933CC">'Hidden'</font>;
    PropertyValue.Value := <b>not</b> Visible;

    LoadParams[0] := PropertyValue;
    <font color="#003399"><i>// http://api.openoffice.org/common/ref/com/sun/star/frame/XComponentLoader.ht</i></font>
    ml
    Document := StarDesktop.LoadComponentFromURL(FileName, <font color="#9933CC">'_blank'</font>, 0, LoadParams
    );

    PropertyValue.Name := <font color="#9933CC">'Name'</font>;
    PropertyValue.Value := <font color="#9933CC">'Canon C LBP 460PS'</font>;

    Document.SetPrinter(LoadParams);

    PropertyValue.Name := <font color="#9933CC">'FileName'</font>;
    PropertyValue.Value := <font color="#9933CC">'C:\test.ps'</font>;

    Document.Print(LoadParams);

    Result := <b>not</b>(VarIsEmpty(Document) <b>or</b> VarIsNull(Document));
    <b>end</b>;

    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>begin</b>
    Connect;
    <b>end</b>;

    <b>procedure</b> TForm1.Button2Click(Sender: TObject);
    <b>begin</b>
    LoadDocument(<font color="#9933CC">'file:///C:/test2.txt'</font>, True);
    <b>end</b>;

    <b>end</b>.


    </code></pre&gt
    Schöne Grüße, Mario

    Comment


    • #3
      Danke<br&gt

      Comment


      • #4
        Da der Quelltext für den Aufruf eines OO-Dokuments fast identisch ist wie in "Der Entwickler 6/2003" hänge ich mich hier mal dran. Nach CreateOleObject und createinstance kommt bei LoadcomponentfromUrl die Fehlermeldung "Variante referenziert kein Automatisierungsobjekt". Der Wert von Staroffice = "$0015...." und der von Stardesktop = "unbekannt" nach der Zuweisung. Wo liegt die Ursache für die Fehlermeldung?.
        Gruß Andrea

        Comment

        Working...
        X