pl.comp.lang.delphi
[Top] [All Lists]

Re: Ole dla OpenOffice

Subject: Re: Ole dla OpenOffice
From: darekm
Date: Wed, 30 Jul 2008 08:54:11 +0200
Newsgroups: pl.comp.lang.delphi


Fox pisze:
Witam, w mojej aplikacji zapisuje i odczytuje dane z dokumentów Excela za pomocą OLE.
//CreateOleObject('Excel.Application');

Chciałbym przerzucić się na darmowy OpenOffice proszę o podpowiedź czy i gdzie można znaleźć na ten temat jakis przykład uzycia pod Delphi.
Szukałem w googlach ale wiekszosc po angielsku a przykładów nie znalazłem.
Fox.


można znaleźć SDI

poniżem mój moduł do tego, może na tej podstawie znajdziesz dokumentację, ale sorry, nie chce mi się go czyścić
<code>
{$IFDEF XHTML}
 {%main htarstar}
 {$DEFINE LOLE}
{$ELSE}
{$I start.inc}
unit arstar;
{$IFDEF LAZARUS}
{$DEFINE LOLE}
{$ENDIF}

interface
uses  wpRoot,wpString,kom,kom2,wpDate,kom3, wpekran,menus,buttons, printers,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
//     ShellAPI,

     Variants,
     {$IFDEF LAZLIN}
       LCLTYPE,
     {$ELSE}
     ComObj,
       {$ENDIF}

     StdCtrls,  ExtCtrls,clipbrd,comctrls,


      wpCmd,{opDos,olectrls}lpt;


{$ENDIF}

type
 TUstawOpen = function(nf : string):string of object;

 TCloseEvent = procedure (Sender : TObject) of object;

   twwStar = class (tComponent)
   public
       tnApp : pointer;
//       wordtask         :  task;
//       sekrettask       :  task;
       StarOffice       : Variant;
  {$IFNDEF LOLE}
       ojciec           :  tWinControl;
       Document         : Variant;
       Fpowrot          : TCloseEvent;
       dontevent        : boolean;
       hhExcel,
       hhMadar          : hwnd;
{$ENDIF}
       ssMadar,
       ssExcel          : ansiString;
       fname            : string;
    constructor Create (pOwner : TComponent); override;

    function Connect() : boolean;
    procedure Disconnect();
    function CreateDocument(bReadOnly : boolean) : boolean;
    function saveDocument(aname : string) : boolean;
    function OpenDocument(aName : string;areadOnly : boolean ) : boolean;
    function BiezDocument(aName : string ) : boolean;
function open(var tw : pointer;plk,plDot : string;apr ,areadonly : boolean):boolean; procedure close(tw : pointer;plk:ansiString;var plf:ansistring;areadOnly:boolean);
    function initApp( it : boolean) : boolean;

    procedure przepisz(tw : pointer;fuw : tUstawOpen);
    procedure zamknij(tw : pointer);
    destructor destroy;override;
    function MakePropertyValue(PropName, PropValue:string):variant;

   end;

var
   starNPtr : twwStar;
function newStar : twwStar;


implementation



  function NEwStar;
  begin
  {$IFNDEF LOLE}
    if StarNPtr=nil then   StarNPtr:=twwStar.create(wpAplication);
    newStar:=StarNPtr;
    {$ENDIF}
  end;

   function testVV(dd : variant):boolean;
   begin
  {$IFNDEF LOLE}
    result:=(VarIsEmpty(Dd) or VarIsNull(Dd));
    {$ENDIF}
   end;


constructor twwStar.create;
begin
  {$IFNDEF LOLE}

  starOffice:=unassigned;
  inherited;
  connect();
  {$ENDIF}
end;



destructor twwStar.destroy;
begin
  disconnect();
  inherited;
  starNPtr:=nil;

end;

function twwStar.initAPP;
begin
  piszlog(1,'initAPP 1','',0,false);
  if  testVV(starOffice) then
    connect;
  piszlog(1,'initAPP 2','',0,false);

end;

function TwwStar.Connect() : boolean;
begin
{$IFNDEF LOLE}
    piszlog(1,'connect A ','',0,false);
    if  VarIsEmpty(StarOffice) then
        StarOffice := CreateOleObject('com.sun.star.ServiceManager');

    Connect := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
    piszlog(1,'connect b ','',0,false);

{$ENDIF}
end;

procedure TwwStar.Disconnect();
begin
    StarOffice := Unassigned;
end;

function TwwStar.MakePropertyValue(PropName, PropValue:string):variant;
var Struct: variant;
begin
{$IFNDEF LOLE}
Struct := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Struct.Name := PropName;
    Struct.Value := PropValue;
    Result := Struct;
{$ENDIF}
end;


function TwwStar.CreateDocument(bReadOnly : boolean) : boolean;
var
    StarDesktop : Variant;
    LoadParams : Variant;
    CoreReflection : Variant;
    PropertyValue : Variant;
begin
{$IFNDEF LOLE}
   result:=false;
    piszlog(1,'start create ','',0,false);
   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');

   if (bReadOnly) then begin
        LoadParams := VarArrayCreate([0, -1], varVariant);
CoreReflection := StarOffice.createInstance('com.sun.star.reflection.CoreReflection');

        CoreReflection
                .forName('com.sun.star.beans.PropertyValue')
                .createObject(PropertyValue);

        PropertyValue.Name := 'ReadOnly';
        PropertyValue.Value := true;

        LoadParams[0] := PropertyValue;
   end
   else
        LoadParams := VarArrayCreate([0, -1], varVariant);

//    piszlog(1,'start create url','',0,false);
Document := StarDesktop.LoadComponentFromURL( 'private:factory/swriter', '_blank', 0, LoadParams);
    piszlog(1,'stop create url','',0,false);

   CreateDocument := not (VarIsEmpty(Document) or VarIsNull(Document));
{$ENDIF}
end;
function TwwStar.OpenDocument(aName : string;areadonly:boolean ) : boolean;
var
    StarDesktop : Variant;
    LoadParams : Variant;
    CoreReflection : Variant;
    PropertyValue : Variant;
    sUrl  : string;
    i   : integer;

begin
{$IFNDEF LOLE}
   result:=false;
   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
   for i:=1 to length(aname) do begin
     if aname[i]='\' then aname[i]:='/';
   end;
   sUrl:='file:///'+aname;
    piszlog(1,'start open ',surl,0,false);
//     sUrl:='file:///1.sxw';

   if (aReadOnly) then begin
        LoadParams := VarArrayCreate([0, 0], varVariant);
CoreReflection := StarOffice.createInstance('com.sun.star.reflection.CoreReflection');

        CoreReflection
                .forName('com.sun.star.beans.PropertyValue')
                .createObject(PropertyValue);

        PropertyValue.Name := 'ReadOnly';
        PropertyValue.Value := true;

        LoadParams[0] := PropertyValue;
   end
   else

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

    piszlog(1,'stop open 1',surl,0,false);
Document := StarDesktop.LoadComponentFromURL( surl, '_blank', 0, LoadParams);
    piszlog(1,'stop open 2',surl,0,false);
   result := not (VarIsEmpty(Document) or VarIsNull(Document));
   {$ENDIF}
end;



function TwwStar.BiezDocument(aName : string ) : boolean;
var
    StarDesktop : Variant;
    LoadParams : Variant;
    loc,
    CoreReflection : Variant;
    PropertyValue : Variant;
    sUrl          : string;
    i   : integer;

begin
{$IFNDEF LOLE}

   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
   for i:=1 to length(aname) do begin

     if aname[i]='\' then aname[i]:='/';
   end;
   sUrl:='private:factory/swriter';
//   sUrl:='file:///'+aname;
//     sUrl:='file:///1.sxw';
   {
   if (bReadOnly) then begin
        LoadParams := VarArrayCreate([0, 0], varVariant);
CoreReflection := StarOffice.createInstance('com.sun.star.reflection.CoreReflection');

        CoreReflection
                .forName('com.sun.star.beans.PropertyValue')
                .createObject(PropertyValue);

        PropertyValue.Name := 'ReadOnly';
        PropertyValue.Value := true;

        LoadParams[0] := PropertyValue;
   end
   else
   }
        LoadParams := VarArrayCreate([0, -1], varVariant);
//    piszlog(1,'star desktop',surl,0,false);

Document := StarDesktop.LoadComponentFromURL( surl, '_default', 0, LoadParams);
   if  document.hasLocation then begin
//    piszlog(1,'haslocation','',0,false);
    loc:=document.getLocation();
   end;
//    piszlog(1,'star open url','',0,false);

   result := not (VarIsEmpty(Document) or VarIsNull(Document));
//    piszlog(1,'star url','',0,false);
{$ENDIF}
end;



function TwwStar.SaveDocument(aName : string ) : boolean;
var
    StarDesktop : Variant;
    LoadParams : Variant;
    CoreReflection : Variant;
    sUrl,
    PropertyValue : Variant;
    i   : integer;

begin
{$IFNDEF LOLE}


{   StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
   for i:=1 to length(aname) do begin
     if aname[i]='\' then aname[i]:='/';
   end;
//   sUrl:='file:///'+aname;
     sUrl:='file:///c:/1.sxw';
}   {
   if (bReadOnly) then begin
        LoadParams := VarArrayCreate([0, 0], varVariant);
CoreReflection := StarOffice.createInstance('com.sun.star.reflection.CoreReflection');

        CoreReflection
                .forName('com.sun.star.beans.PropertyValue')
                .createObject(PropertyValue);

        PropertyValue.Name := 'ReadOnly';
        PropertyValue.Value := true;

        LoadParams[0] := PropertyValue;
   end
   else
   }
        LoadParams := VarArrayCreate([0, -1], varVariant);

   Document .storeAsURL( surl, '_blank', 0,  LoadParams);


   result := not (VarIsEmpty(Document) or VarIsNull(Document));
   {$ENDIF}
end;




function twwStar.open;
var
   s1,s2,s3,s4,s5,s6,s7,s8,s9,s10 : olevariant;

begin
{$IFNDEF LOLE}

       s1:=plk;
       result:=false;
       initAPP(false);
       try
         if (plk<>'') and fileexists(plk) then begin
  //           tndd:=tnApp.documents.open(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10);
             result:=openDocument(plk,areadonly)
         end else  begin
            if (pldot<>'') and fileexists(pldot) then   s1:=pldot;
  //                               else  s1:=tnapp.normaltemplate.fullname;
             if not areadOnly then
             result:=createdocument(false);
  //           biezdocument('a');
         end;
       except
          StarOffice := Unassigned;
          document:=unassigned;

       end;

//       if result=false then

{$ENDIF}
end;


procedure twwStar.przepisz;
var
  pt : pchar;
  i1,j,
  i : integer;
  sn,
  sa : string;
  oText,
  oFound,
  ocursor,
  oFoundAll,
  oSearch : variant;
begin
 {
  oText:=document.Text;
  oSearch:=document.createSearchDescriptor();
  oSearch.SearchString:='^^^';
  oSearch.SearchRegularExpresion:=true;
  ofoundall:=document.findAll(oSearch);
  for i:=0 to oFoundAll.Count -1 do begin
    oFound:=oFoundAll[i];
    oCursor:=oText.createTextCursorByRange(oFound);
    oText.insertString(oCursor,'GGGGG');
  end;

 }

end;


procedure twwStar.zamknij;
var
 s1,s2,s3,s4,s5 : oleVariant;
// tndd  : document;
 i,il     : integer;
begin
{$IFNDEF LOLE}

  piszlog(1,'star zamknij','',0,false);
  if testVV(starOffice) then exit;

  if testVV(document) then exit;

  document.close(true);
//  starOffice:=unassigned;
{$ENDIF}
end;



procedure twwStar.close;
var
 s1,s2,s3,s4,s5 : oleVariant;
 sUrl  : String;
  loc,

 tndd  : variant;
  PropertyValue : Variant;
  LoadParams : Variant;
 i,il     : integer;
 de   : boolean;
begin
{$IFNDEF LOLE}
  plf:='';
  if testVV(starOffice) then exit;

  if testVV(document) then exit;
//  s4:=plk;
    piszlog(1,'close 1',plk,0,false);
   if  document.hasLocation then begin
    piszlog(1,'close has','',0,false);
    if document.isModified then begin
      loc:=document.getLocation();
      piszlog(1,'haslocation',loc,0,false);
      document.store();

      plf:=loc;
    end;
   end  else begin
    piszlog(1,'close nhas','',0,false);
     plf:=plk;
     for i:=1 to length(plk) do begin
       if plk[i]='\' then plk[i]:='/';
     end;
     surl:='file:///'+plk;

     piszlog(1,'star close',plk,0,false);
  {
  il:=tnApp.documents.count;
  tndd:=nil ;
  for i := 1 to il do begin
    s5:=i;
    tndd:=tnApp.Documents.item(s5);
    if tndd.fullname=plk then break else tndd:=nil;
  end;
  }
//  tndd:=document(tw);


//  if (plk<>'') and (tndd .fullname<>plk) then begin
    piszlog(1,'star fullname',plk,0,false);
    if document.isModified then begin
       piszlog(1,'star stop modified',surl,0,false);
        LoadParams := VarArrayCreate([0, 0], varVariant);
//        PropertyValue.Name := 'Overwrite';
//        PropertyValue.Value := false;
//        LoadParams[0] := PropertyValue;
        loadParams[0] := MakePropertyValue('Overwrite', 'false');

//        sUrl:='file:///1.sxw';
         document.storeAsUrl(surl,loadParams);
    end;

  end;
  {$ENDIF}
end;


end.
</code>

<Prev in Thread] Current Thread [Next in Thread>
Privacy Policy