¿Cómo buscar y reemplazar en el documento ODT Open Office?
-
25-10-2019 - |
Pregunta
En mi aplicación Delphi, actualmente busco y reemplazo programáticamente para documentos de DOC y DOCX Word utilizando Office OLE Automation. ¿Alguien tiene el código para hacer lo mismo (para Doc, Docs, ODT) en OpenOffice?
También le pregunté a un Pregunta relacionada sobre el guardar en PDF.
Solución
Deberías centrarte en XREPLUTABLE interfaz. Aquí está el ejemplo. Tenga en cuenta que no hay manejo de errores. Lo probé con LibreOffice Writer y funciona bien para mí.
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;
Y el uso del ejemplo
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenOfficeReplace('file:///C:/File.odt', 'Search', 'Replace');
end;
También hay varias opciones de búsqueda/reemplazo para SearchDescriptor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow