| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
edgar_dh Ens

Registrado: 12 Jul 2003Mensajes: 34Ubicación: Venezuela
|
Publicado: Vie 25 Nov, 2005 4:32 pm Asunto: Reemplazo de texto en Word Leo |
|
|
Estimado programadores tengo el siguiente problema el cual consiste yo tengo varios documentote Word en lo cuales debo cambiar el texto “___/___/___” por un fecha que tengo almacenada en un tabla de paradox como hago, revise el foro y no encotre el siguiente codigo de Leo:
//////////////////////////////////////////////////////////////
Código:
Variant vWord, vDocumentos, vDocumento, vStoryRanges, vBuscar, vRango;
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
);
const int maxStory = 2;
int story[maxStory] = { 1 /*wdMainTextStory*/,
5 /*wdTextFrameStory*/ };
for (int i=0; i<maxStory; ++i)
{
vStoryRanges = vDocumento.OlePropertyGet("StoryRanges");
try
{
vRango = vStoryRanges.OleFunction("Item", story[i]);
}
catch (EOleSysError& e)
{
continue;
}
do
{
vBuscar = vRango.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 << Edit1->Text.c_str() << 2);
vRango = vRango.OlePropertyGet("NextStoryRange");
} while(static_cast<IDispatch*>(vRango));
} // for i
//--- 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 = vStoryRanges = vBuscar = vRango = Unassigned;
---------------------------------------------------------------------------
El cual tratando usar C++ Builder 4 me da problemas con “if (checkGuardar->Checked)” asi que no he podido corregirlo
Esperando si alguie me puede ayudar |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 28 Nov, 2005 4:09 pm Asunto: |
|
|
Estimado edgar_dh...
| Cita: |
El cual tratando usar C++ Builder 4 me da problemas con “if (checkGuardar->Checked)” asi que no he podido corregirlo
|
checkGuardar es un checkbox, ¿lo has agregado a tu formulario?
También necesitas un Edit (claro, segun el ejemplo de _Leo).
Saludos _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
edgar_dh Ens

Registrado: 12 Jul 2003Mensajes: 34Ubicación: Venezuela
|
Publicado: Lun 28 Nov, 2005 7:22 pm Asunto: Gracias por tu Pronta ayuda |
|
|
Gracias por tu Pronta ayuda a hora cuando se ejecuta la aplicación se genera el siguiente error:
Raise exception Class EOleSysError with message’Ocurrio una excepcion‘
Si me puedes ayudar te lo agradezco |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 28 Nov, 2005 7:44 pm Asunto: |
|
|
Creo que hay una diferencia con el código que yo tengo (pero el autor es _Leo).
| 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;
|
En este caso se necesitan dos Edits y un checkbox.
Toma en cuenta que en la plantilla deben de estar en cualquier lugar los textos {{cliente}} y {{direccion}}, que son las cadenas que serán reemplazadas por los valores que contengan los Edits.
Saludos.
Lo he probado y no tengo ningun problema. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Kurroman Lt

Registrado: 07 Dic 2003Mensajes: 79
|
Publicado: Mar 29 Nov, 2005 1:15 pm Asunto: |
|
|
El "ocurrio una excepcion" suena a k no enkuentre el fichero plantilla o la ruta donde guardarlo/cargarlo. A mi es el fallo tipiko k me pasa kuando automatizo word  |
|
| Volver arriba |
|
 |
edgar_dh Ens

Registrado: 12 Jul 2003Mensajes: 34Ubicación: Venezuela
|
Publicado: Mar 29 Nov, 2005 1:45 pm Asunto: Buenos Días Gracias por la ayuda |
|
|
Buenos Días Gracias por la ayuda, estos momento ya se puede compilar pero al dar el clic al botón sale el siguiente caja de mensaje:
_Asserte:
Isbouns @ d:\bcb\emuvcl\utilcls.h/2410
Pres[Y]es to terminate, [N] o to continue and [C]ancel to debug
Con cualquier de las opciones que se presiones se genera una excepción y se cierra la aplicación ( Por otro lado tengo Win 2000, Office 2003 y C++ builder 4)
Si me puede ayudar se lo agradezco |
|
| Volver arriba |
|
 |
edgar_dh Ens

Registrado: 12 Jul 2003Mensajes: 34Ubicación: Venezuela
|
Publicado: Jue 01 Dic, 2005 2:28 pm Asunto: Alguien me puede enviar reemplazo de word |
|
|
Por favor algún programador me pueden enviar por favor un proyecto de builder con los archivo de Word para ver como se realiza el reemplazo y ver cual es mi error dando que tengo una semana en esto y me esta afectando en no poder hacer dicho reemplazo
Edgar_dh@hotmail.com o Edgar_dh@yahoo.com |
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Sab 27 May, 2006 1:48 pm Asunto: ok... |
|
|
Alguien podría colgar algún ejemplito para ver como es el uso, ya que yo también he tenido problemas y no los he podido solucionar.Gracias... _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 27 May, 2006 5:11 pm Asunto: |
|
|
| Cita: | | Alguien podría colgar algún ejemplito para ver como es el uso |
En este enlace tienes los ejemplos que puse hace 4 años, tienes también los ejecutables por si quieres probarlos directamente y a mi me funcionan incluso hasta con la última beta del Office 2007:
https://cppbuilder.es/viewtopic.php?p=8501
Si el ejecutable te da algún problema revisa tu instalación de Office o pruébalo en otra maquina... |
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Sab 27 May, 2006 6:06 pm Asunto: gracias _Leo |
|
|
gracias por tu ayuda, suerte... _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Sab 27 May, 2006 8:48 pm Asunto: una preguntica final |
|
|
_Leo quería preguntarte como se podría añadir una linea/s en código que implementaste para que imprimiera el archivo que generas en tu programa. Gracias por tu ayuda. Suerte.... _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 28 May, 2006 12:03 am Asunto: |
|
|
Puedes añadir una de las siguientes líneas antes de la parte donde se guarda el documento:
vDocumento.OleProcedure("PrintOut");
o
vDocumento.Exec(Procedure("PrintOut")); |
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Dom 28 May, 2006 4:13 pm Asunto: muchas gracias _Leo |
|
|
gracias por todo, yo estaba intentando este código:
| Código: |
vDocumento.OleProcedure("Print");
|
pero me salía siempre un error y no encontré información de que palabra debía yo escribir ahí o como podría hacer ejecutar otras acciones similares. Gracias, suerte.... _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Dom 28 May, 2006 5:47 pm Asunto: ok gracias... |
|
|
ya estuve revisando y en el editor de visual basic en word encontré muchísima información con respecto a esto, de todas formas muchas gracias por tu ayuda _Leo, se te agradece, suerte... _________________ Entre más sé, sé que nada sé
----------------------------------
Miguel Angel Torres Arredondo
Siegen - Deutschland |
|
| Volver arriba |
|
 |
|