Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   OLE OpenOffice Textersetzung, OO unsichtbar machen (https://www.delphipraxis.net/166735-ole-openoffice-textersetzung-oo-unsichtbar-machen.html)

hoika 27. Feb 2012 15:40

OLE OpenOffice Textersetzung, OO unsichtbar machen
 
Hallo #,

der folgende Code dient zum Ersetzen von Texten

Delphi-Quellcode:
procedure OpenOfficeReplace(const AFileURL: string; ASearch: string; const AReplace: string);
var
  StarOffice: Variant;
  StarDesktop: Variant;
  StarDocument: Variant;
  FileReplace: Variant;
  FileParams: Variant;
  FileProperty: Variant;

begin
  StarOffice := CreateOleObject('com.sun.star.ServiceManager');
  StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');

  FileParams := VarArrayCreate([0, 0], varVariant);
  FileProperty := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  FileProperty.Name := 'Hidden';
  FileProperty.Value := False;
  FileParams[0] := FileProperty;

  StarDocument := StarDesktop.LoadComponentFromURL(AFileURL, '_blank', 0, FileParams);

  FileReplace := StarDocument.CreateReplaceDescriptor;
  FileReplace.SearchCaseSensitive := False;
  FileReplace.SetSearchString(ASearch);
  FileReplace.SetReplaceString(AReplace);

  StarDocument.ReplaceAll(FileReplace);

  ShowMessage('Replace has been finished');
StarDocument.Close(True);
  StarDesktop.Terminate;
  StarOffice := Unassigned;
end;
gefunden hier:
http://stackoverflow.com/questions/7...ffice-document

Bis zum ShowMessage sieht es gut aus.
Aber irgendwie wird nichts gespeichert.





Danke


Heiko

shmia 27. Feb 2012 17:47

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen
 
Da fehlt wohl auch ein
Delphi-Quellcode:
StartDocument.storeToURL('file://c:/temp/test.sxw', {keine Ahnungwozu dieser Parameter gut ist}Null);
Und für den richtigen Aufbau der URL gibts von mir kein Gewehr.

hoika 28. Feb 2012 06:51

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen
 
Hallo,

file:/// ;)

Was ich vergessen hatte,
das Original-Bsp. benutzt ODT's, ich will das für DOC'S machen.
Das ist mir gestern Abend eingefallen.

Die Lösung !!! Dada !!! ;)

Delphi-Quellcode:
procedure OpenOfficeReplace(const AFileURL: string; ASearch: string; const AReplace: string);
var
  StarOffice: Variant;
  StarDesktop: Variant;
  StarDocument: Variant;
  FileReplace: Variant;
  FileParams: Variant;
  FileProperty: Variant;
  EmptyParam: Variant;
  SaveParams: OleVariant;
  SaveProperty: OleVariant;
begin
  EmptyParam:= VarArrayCreate([0,-1],varVariant);

  StarOffice := CreateOleObject('com.sun.star.ServiceManager');
  StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');

  FileParams := VarArrayCreate([0, 0], varVariant);
  FileProperty := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');

  FileProperty.Name := 'Hidden';
  FileProperty.Value := True;
  FileParams[0] := FileProperty;

  StarDocument := StarDesktop.LoadComponentFromURL(AFileURL, '_blank', 0, FileParams);

  FileReplace := StarDocument.CreateReplaceDescriptor;
  FileReplace.SearchCaseSensitive := False;
  FileReplace.SetSearchString(ASearch);
  FileReplace.SetReplaceString(AReplace);

  StarDocument.ReplaceAll(FileReplace);

  SaveParams:= VarArrayCreate([0, 0], varVariant);
  SaveProperty := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  SaveProperty.Name:= 'FilterName';
  SaveProperty.Value:= 'MS Word 97';
  SaveParams[0]:= SaveProperty;

  StarDocument.storeAsUrl(AFileURL, SaveParams);

//  ShowMessage('Replace has been finished');

  StarDocument.Close(True);
  StarDesktop.Terminate;
  StarOffice := Unassigned;
end { OpenOfficeReplace } ;


Danke


Heiko

Lemmy 28. Feb 2012 07:28

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen
 
hi,

der zusätzliche Parameter beim Laden (und auch speichern) beinhaltet zusätzliche Optionen die in com.sun.star.document.MediaDescriptor beschrieben sein sollten (könnte sein, dass die in der aktuellen SDK ggf. inzwischen wo anders stehen).

Um eine Datei zu exportieren, ist etwas Aufwand notwendig:

Delphi-Quellcode:
procedure TForm1.btnExportClick(Sender: TObject);
var vSvcMgr, vDesktop, vEmptyParam, vDoc, vSaveParams,
  vCoreReflection, vPropertyValue:OleVariant;
  sFileName:String;
begin
  vEmptyParam:=VarArrayCreate([0, -1], varVariant);
  vSvcMgr:=CreateOleObject(‘com.sun.star.ServiceManager’);
  vDesktop:=vSvcMgr.createInstance(‘com.sun.star.frame.Desktop’);
  vDoc:=vDesktop.LoadComponentFromURL(‘private:factory/swriter’,’_blank’,0, vEmptyParam);
 
  vsaveParams := VarArrayCreate([0, 0], varVariant);
  vCoreReflection := vSvcMgr.createInstance(‘com.sun.star.reflection.CoreReflection’);
  vCoreReflection.forName(‘com.sun.star.beans.PropertyValue’).createObject(vPropertyValue);
  vPropertyValue.Name := ‘FilterName’;
  vPropertyValue.Value := ‘MS Word 97’;
  vsaveParams[0] := vPropertyValue;
 
  if SaveDialog1.Execute then begin
    sFileName:= KonvFileName(SaveDialog1.FileName);
    vDoc.storeAsUrl(sFileName, vsaveParams);
  end;
end;
vEmptyParam sollte in aktuelleren Delphi-Versioenen nicht mehr notwendig sein, da gibts IMHo schon einen definierten EmptyParam

verflixt zu spät...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz