| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Mar 18 Nov, 2003 5:48 pm Asunto: word dentro de un OleContainer |
|
|
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 |
|
 |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Mie 19 Nov, 2003 1:18 pm Asunto: Ideas |
|
|
| Cualquier idea es bienvenida |
|
| Volver arriba |
|
 |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Mie 19 Nov, 2003 1:21 pm Asunto: Ideas |
|
|
| Cualquier idea es bienvenida |
|
| Volver arriba |
|
 |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Mie 19 Nov, 2003 7:11 pm Asunto: Cualquier idea es bienvenida |
|
|
| .... |
|
| Volver arriba |
|
 |
Eduardo Cdt

Registrado: 15 Jul 2003Mensajes: 19
|
Publicado: Jue 20 Nov, 2003 12:10 pm Asunto: |
|
|
| ... |
|
| Volver arriba |
|
 |
yo mismo Invitado
|
Publicado: Jue 20 Nov, 2003 5:03 pm Asunto: lo he logrado |
|
|
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 |
|
 |
yo mismo Invitado
|
Publicado: Jue 20 Nov, 2003 6:50 pm Asunto: un problema |
|
|
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 |
|
 |
Yo Mismo Invitado
|
Publicado: Vie 21 Nov, 2003 12:18 pm Asunto: |
|
|
| Pero no me resulta, alguna idea... |
|
| Volver arriba |
|
 |
risu Cdt

Registrado: 17 Nov 2003Mensajes: 6Ubicación: Las Palmas (Islas Canarias)
|
Publicado: Vie 21 Nov, 2003 1:10 pm Asunto: |
|
|
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 |
|
 |
yo mismo Invitado
|
Publicado: Vie 21 Nov, 2003 2:26 pm Asunto: |
|
|
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 |
|
 |
yo mismo Invitado
|
Publicado: Vie 21 Nov, 2003 10:06 pm Asunto: |
|
|
| Un poco de ayuda porfa |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 23 Nov, 2003 4:48 pm Asunto: |
|
|
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 |
|
 |
yo mismo Invitado
|
Publicado: Lun 24 Nov, 2003 1:41 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 24 Nov, 2003 4:18 pm Asunto: |
|
|
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 |
|
 |
YO MISMO Invitado
|
Publicado: Lun 24 Nov, 2003 4:57 pm Asunto: |
|
|
GRANDE LEO
TE PASASTE, UN MILLON DE GRACIAS |
|
| Volver arriba |
|
 |
|