Tal vez te sirva esto ya que permite reemplazar texto en word, lo copie hace dias en un foro (probablente este)
//*****************************************
"Esta función permite sustituir texto dentro de un documento de Word.
La ventaja es que usamos enlace tardío, con lo que no tenemos que complicarnos
instalando componentes ni librerías.
Seria útil por ejemplo para crear reportes sencillos usando Word. Por ejemplo,
podemos sustituir "{{nombre}}" por "Pepito de los palotes". Además se mantiene
el formato que le hayamos dado al texto que vamos a sustituir.Lo primero es añadir el siguiente código al comienzo de nuestro modulo:"
code:
--------------------------------------------------------------------------------
#if (__BORLANDC__ >= 0x0530)
#include <Comobj.hpp>#else
#include <oleauto.hpp> // BCB 1#endif
--------------------------------------------------------------------------------
y a continuación para probarlo añadimos un TButton y dentro de su evento
OnClick metemos el siguiente código:
Variant vWord, vDocumentos, vDocumento, vSeleccion, vBuscar;
String sPath = ExtractFilePath( Application->ExeName );
String sFicheroPlantilla = sPath + "plantilla.doc";
String sFicheroGenerado = sPath + "plantilla2.doc";
//--- Abre Word
vWord = CreateOleObject( "Word.Application" );
vWord.OlePropertySet( "Visible", !checkGuardar->Checked );
//--- Abre el documento que usaremos como plantilla
vDocumentos = vWord.OlePropertyGet( "Documents" );
vDocumento = vDocumentos.OleFunction( "Open",
sFicheroPlantilla.c_str(), // Documento
false, // Confirmar conversiones
true, // Modo se solo lectura
false, // Añadir al menu de ficheros recientes
"" // Clave del documento
);
//--- Selecciona todo el documento para reemplazar
vSeleccion = vWord.OlePropertyGet( "Selection" );
vSeleccion.OlePropertyGet( "Range" ).OleProcedure( "SetRange", 0, 0 );
vBuscar = vSeleccion.OlePropertyGet( "Find" );
vBuscar.OleProcedure( "ClearFormatting" );
vBuscar.OlePropertyGet( "Replacement" ).OleProcedure( "ClearFormatting" );
//--- sustituimos una palabra
// Aqui podemos meter el bucle que va a ir reemplanzando palabras
vBuscar.Exec( Procedure( "Execute" )
<< "{{nombre}}" // Texto a buscar
<< VT_EMPTY // Coincidir mayusculas y minusculas
<< VT_EMPTY // Solo palabras completas
<< VT_EMPTY // Usar caracteres comodin
<< VT_EMPTY // Suena como
<< VT_EMPTY // Todas las formas de la palabra
<< true // Hacia adelante
<< VT_EMPTY // Wrap
<< VT_EMPTY // Format
<< Edit1->Text.c_str() // Reemplazar con...
<< 2 // 2 = reemplazar todo
);
//--- sustituimos otra palabra
vBuscar.Exec( Procedure( "Execute" ) << "{{direccion}}"
<< VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY
<< true << VT_EMPTY << VT_EMPTY << Edit2->Text.c_str() << 2 );
//--- salvamos automaticamente si procede y cerramos Word
if ( checkGuardar->Checked )
{
vDocumento.OleProcedure( "SaveAs", sFicheroGenerado.c_str() );
vDocumento.OleProcedure( "Close", 0xFFFFFFFF);
vWord.OleProcedure( "Quit" );
ShowMessage("Documento generado.");
}
vWord = vDocumentos = vDocumento = vSeleccion = vBuscar = Unassigned;