2011-10-18 25 views
5

Trong ứng dụng Delphi của tôi, tôi hiện đang thực hiện tìm kiếm & Thay thế lập trình cho tài liệu văn bản doc và docx bằng tự động hóa văn phòng ole. Có ai có mã để làm như vậy (đối với doc, docs, odt) trong OpenOffice không?Cách tìm kiếm và thay thế trong tài liệu ODT Open Office?

Tôi cũng đã hỏi related question on saving to pdf.

+0

có mã delphi để thao tác tài liệu docx không? – none

+1

Có nhiều, bạn nên sử dụng tự động hóa OLE (ActievX) ví dụ: http://stackoverflow.com/questions/5484721/delphi-convert-doc-to-pdf-using-word-activex – LaBracca

Trả lời

7

Bạn nên tập trung vào giao diện XReplaceable. Đây là ví dụ. Xin lưu ý rằng không có lỗi xử lý. Tôi đã thử nghiệm nó với nhà văn LibreOffice và nó hoạt động tốt cho tôi.

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; 

Và việc sử dụng các ví dụ

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

Ngoài ra còn có một vài tìm kiếm/thay thế tùy chọn cho SearchDescriptor.

+0

Tuyệt vời, người ta phải quen với // thay vì \ nhưng nó hoạt động rất tốt! – LaBracca

Các vấn đề liên quan