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.

¿Fue útil?

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
scroll top