AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi OLE OpenOffice Textersetzung, OO unsichtbar machen
Thema durchsuchen
Ansicht
Themen-Optionen

OLE OpenOffice Textersetzung, OO unsichtbar machen

Ein Thema von hoika · begonnen am 27. Feb 2012 · letzter Beitrag vom 28. Feb 2012
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

OLE OpenOffice Textersetzung, OO unsichtbar machen

  Alt 27. Feb 2012, 15:40
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
Heiko

Geändert von hoika (27. Feb 2012 um 16:02 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen

  Alt 27. Feb 2012, 17:47
Da fehlt wohl auch ein 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.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen

  Alt 28. Feb 2012, 06:51
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
Heiko

Geändert von hoika (28. Feb 2012 um 07:25 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: OLE OpenOffice Textersetzung, OO unsichtbar machen

  Alt 28. Feb 2012, 07:28
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz