![]() |
OLE OpenOffice Textersetzung, OO unsichtbar machen
Hallo #,
der folgende Code dient zum Ersetzen von Texten
Delphi-Quellcode:
gefunden hier:
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; ![]() Bis zum ShowMessage sieht es gut aus. Aber irgendwie wird nichts gespeichert. Danke Heiko |
AW: OLE OpenOffice Textersetzung, OO unsichtbar machen
Da fehlt wohl auch ein
Delphi-Quellcode:
Und für den richtigen Aufbau der URL gibts von mir kein Gewehr.
StartDocument.storeToURL('file://c:/temp/test.sxw', {keine Ahnungwozu dieser Parameter gut ist}Null);
|
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 |
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:
vEmptyParam sollte in aktuelleren Delphi-Versioenen nicht mehr notwendig sein, da gibts IMHo schon einen definierten EmptyParam
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; 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