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 

word dentro de un OleContainer
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: word dentro de un OleContainer Responder citando

En una forma hija tengo un OleContainer donde abro un archivo word,
de la sgte forma;

TForm2 *Form2=new TForm2(this);
Form2->OleContainer1->CreateObjectFromFile("c:\\Vehiculos Pesados\\SOLICITUD DE TRASLADO.doc",false);

pero ahora deseo abrir ese mismo archivo word pero cargando datos;

//--- 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" );


vBuscar.Exec( Procedure( "Execute" )<< "{{NOMBRE}}"<< VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY
<< true << VT_EMPTY << VT_EMPTY << Edit1->Text << 2);



vWord.OlePropertySet( "Visible",true);
vWord = vDocumentos = vDocumento = vSeleccion = vBuscar = Unassigned;

}


Pero no me resulta, alguna idea...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Ideas Responder citando

Cualquier idea es bienvenida
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Ideas Responder citando

Cualquier idea es bienvenida
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Cualquier idea es bienvenida Responder citando

....
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: lo he logrado Responder citando

Variant vWord, vDocumentos, vDocumento, vSeleccion, vBuscar;
String sPath = ExtractFilePath( Application->ExeName );
//--- Abre Word
vWord = CreateOleObject( "Word.Application" );

OleContainer1->CreateObjectFromFile("c:\\Vehiculos Pesados\\SOLICITUD DE TRASLADO.doc", False);
OleContainer1->DoVerb(0);



//--- 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" );


vBuscar.Exec( Procedure( "Execute" )<< "{{NOMBRE}}"<< VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY << VT_EMPTY
<< true << VT_EMPTY << VT_EMPTY << Edit1->Text.c_str() << 2);


vWord = vDocumentos = vDocumento = vSeleccion = vBuscar = Unassigned;
Volver arriba
Mensaje    Asunto: un problema Responder citando

Al ejecutar la intruccion descrita arriba
//--- Abre Word
vWord = CreateOleObject( "Word.Application" );
abre el word sin ningun documento fuera del OleContainer
y tambien abre la plantilla dentro del OleContainer con el dato que ingreso.

que estoy haciendo mal
Volver arriba
Mensaje    Asunto: Responder citando

Pero no me resulta, alguna idea...
Volver arriba
Mensaje    Asunto: Responder citando

Mira en la sección TIPS & TRICKS (https://cppbuilder.es/viewtopic.php?t=3688) tienes un tema que es abrir word desde un formulario o algo así donde conseguirás lo que buscas.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Yo quiero que la plantilla donde sustitullo texto aparesca dentro de un
OleContainer, no como el ejemplo que tu me das, que abre el word en forma independiente.
Volver arriba
Mensaje    Asunto: Responder citando

Un poco de ayuda porfa
Volver arriba
Mensaje    Asunto: Responder citando

No seas tan impaciente, entre un mensaje y otro apenas has dejado pasar tiempo. Cuando veas que no te responden no te limites a repetir lo mismo, es mejor que añadas más datos de lo que quieres conseguir, ya que es posible que no te hayan entendido.

Has puesto código mezclado que no tiene nada que ver el uno con el otro, por lo que supongo que lo que quieres es "comunicarlo" de alguna manera. Aquí va un pequeño ejemplo por si te da una pista:

// Abrimos un documento usando el TOleContainer
OleContainer1->CreateObjectFromFile("c:\\prueba.doc", false);
OleContainer1->DoVerb(0);

// Y aquí una forma de comunicarnos con el objeto cargado
Variant documento = OleContainer1->OleObject;

// Añadimos una linea de texto al comienzo del documento
Variant contenido = documento.OlePropertyGet("Content");
contenido.OleProcedure("Insertbefore", "Esto es una prueba\n\n\n");

Espero que te sirva de algo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

LEO gracias una vez más por responder.
Pero no se de donde puedo sacar ayuda, o leer sobre el tema o como buscar sobre esto.

Tu me dices como insertar una frase a la plantilla, pero YO nesecito
ingresar una frase en cierto lugar como por ejemplo;
Mi nombre es: {{NOMBRE}}

GRACIAS POR TODO
Eduardo Salinas.
Volver arriba
Mensaje    Asunto: Responder citando

Solo trataba de mostrarte como comunicar el TOleContainer con el ejemplo donde se muestra como sustituir texto en Word utilizando automatización-OLE, suponiendo que este ya sabias como usarlo.

Bueno, aquí va el código completo adaptando el ejemplo anterior para usarlo con el TOleContainer. Teniendo un documento cargado en el TOleContainer como se muestra mas arriba, añadimos el siguiente código para hacer los cambios de texto:
Código:
/////////////////////////////////////////////////////////////////////
// Cambiamos {{nombre}} y {{direccion}} por el contenido de los edits
//
Variant vDocumento = OleContainer1->OleObject;
Variant vWord      = vDocumento.OlePropertyGet("Application");

//--- Selecciona todo el documento para reemplazar
Variant vSeleccion = vWord.OlePropertyGet("Selection");
vSeleccion.OlePropertyGet("Range").OleProcedure("SetRange", 0, 0);

Variant 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 los cambios en un nuevo documento
String sFicheroGenerado = ExtractFilePath(Application->ExeName) + "plantilla2.doc";
vDocumento.OleProcedure("SaveAs", sFicheroGenerado.c_str());

vWord = vDocumento = vSeleccion = vBuscar = Unassigned;


Si te es más comodo, en el siguiente enlace tienes el proyecto de ejemplo para el BCB6:

            http://cppbuilder.hypermart.net/Word_OleContainer.zip
 
 
 
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

GRANDE LEO

TE PASASTE, UN MILLON DE GRACIAS
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.