Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Reemplazar texto en Word Automatizacion OLE!!

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Reemplazar texto en Word Automatizacion OLE!! Responder citando

Hola:

Buscando en la red me encontre con este codigo en Delphi, que hace justo lo que necesito, abrir un documento de word existente y reemplazar en el una serie de palabras y guardar dicho docuemento con un nuevo nombre, el problema es que no se como pasarlo a C++ Builder 6.0, me pregunto si sera posible incluir una unidad de codigo Delphi(Object Pascal) en mi projecto para luego invocar la funcion que hace lo que necesito desde una unidad .CPP...??

este es el codigo:

Código:

uses
  ComObj;

// Replace Flags
type
  TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);

function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
begin
  Result := False;

  { Check if file exists }
  if not FileExists(ADocument) then
  begin
    ShowMessage('Specified Document not found.');
    Exit;
  end;

  { Create the OLE Object }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'Word is not available.';
      raise;
    end;
  end;

  try
    { Hide Word }
    WordApp.Visible := False;
    { Open the document }
    WordApp.Documents.Open(ADocument);
    { Initialize parameters}
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := SearchString;
    WordApp.Selection.Find.Replacement.Text := ReplaceString;
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    { Perform the search}
    if wrfReplaceAll in Flags then
      WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
    else
      WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
    { Save word }
    WordApp.ActiveDocument.SaveAs(ADocument);
    { Assume that successful }
    Result := True;
    { Close the document }
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
  finally
    { Quit Word }
    WordApp.Quit;
    WordApp := Unassigned;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Word_StringReplace('C:\Test.doc','Old String','New String',[wrfReplaceAll]);
end;



De antemano muhcas gracias,

Saludos.
Bye.
Volver arriba
Mensaje    Asunto: Si se puede Responder citando

Holas Juan
ante tu pregunta
Cita:
me pregunto si sera posible incluir una unidad de codigo Delphi(Object Pascal) en mi projecto para luego invocar la funcion que hace lo que necesito desde una unidad .CPP...??

Que yo sepa si se puede incluir una unidad Pascal en el C++ Builder lo que necesitas es agregarla a tu proyecto compilarla y despues te genera un archivo de cabecera el cual puedes agregar en la unidad donde haras uso de la rutina que necesitas.

Americo
C++Builder lo Mejor de lo Mejor
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: ? Responder citando

Hola, garciaspor la ayuda, estoy intentando compilar la unidad pero me da errorres, el codigo que puse en el post anterior esta tal yo como lo encontre entonces no creo que hayan errores, asi que debo estar integrando la unidad .pas mal...alguien puede decirme como enlazar la unidad .pas a mi prigrama??

Mil gracias por lla ayuda,

Saludos.
Volver arriba
Mensaje    Asunto: Responder citando

Puede que te sirva. Es más o menos lo mismo en C++:

https://cppbuilder.es/viewtopic.php?t=3688
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Hnmmmmmmmmmm, Responder citando

Hola _Leo gracias por tu respuesta,

para imprmir el documento llamado Plantillla, al que haces referencia en el codigo del post anterior podriamos usar algo como esto:

Código:

vDocumento.OleProcedure("Print");


De antemano gracias,

Saludos.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.