2011-10-18 23 views
5

Delphi uygulamasında şu anda arama yapıyorum & Office ole otomasyonunu kullanarak doc ve docx word belgeleri için programsal olarak değiştirin. Herkesin OpenOffice'de aynı şeyi (doc, docs, odt) yapması için kodu var mı?Odt'ta nasıl arama yapılır ve değiştirilir?

Ayrıca bir related question on saving to pdf sordum.

+0

docx belgelerini işlemek için bir delphi kodu var mı? – none

+1

Evet, OLE otomasyonunu (ActievX) kullanmalısınız, örneğin http://stackoverflow.com/questions/5484721/delphi-convert-doc-to-pdf-using-word-activex – LaBracca

cevap

7

XReplaceable arabirimine odaklanmalısınız. İşte örnek. Lütfen bir hata işleme olmadığını unutmayın. LibreOffice yazarı ile test ettim ve benim için iyi çalışıyor.

uses 
    ComObj; 

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; 

Ve örnek

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    OpenOfficeReplace('file:///C:/File.odt', 'Search', 'Replace'); 
end; 

kullanımı SearchDescriptor seçeneklerini değiştirin/ayrıca çeşitli arama vardır.

+0

Harika, sadece alışmak için // yerine // ama harika çalışıyor! – LaBracca

İlgili konular