|
|
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>
|
|