 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
SumSum Lt JG


Registrado: 06 Oct 2002Mensajes: 52
|
Publicado: Mie 13 Nov, 2019 1:02 pm Asunto: Word abrir y reemplazar texto con c++ Builder 10.1 Berlin |
|
|
Buenos días,
Hasta la fecha estaba utilizando el código de Leo sobre abrir una plantilla de Word con marcadores y sustituir texto
Está publicado en
https://cppbuilder.es/viewtopic.php?p=8501
Sin embargo, ahora con la versión de c++Builder 10.1 Berlin en el momento que quiero abrir el Word me da un error "Tipo de variable incorrecto".
El código original que me funciona en C++Builder 6 es
vDocumento = vDocumentos.OleFunction( "Open", sFicheroPlantilla.c_str(), false, true, false, "" );
definiendo antes String sFicheroPlantilla
Pero como os comento con c++Builder Berlin 10.1 no me funciona. He probado varias opciones, por ejemplo esto
vDocumento = vDocumentos.OleFunction( "Open", WideString(sFicheroPlantilla), false, true, false, "" );
y también definiendo WideString sFicheroPlantilla
He utilizado un compenente de OpenDialog para utilizar su FileName
vDocumento = vDocumentos.OleFunction( "Open", WideString(Abrir->FileName), false, true, false, "" );
y esto también con .c_str()
En todas las pruebas tengo el error de "Tipo Variable Incorrecto"
Agradezco la ayuda, y si antes encuentro la solución os digo.
Gracias de antemano _________________ Asun |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 14 Nov, 2019 7:38 am Asunto: |
|
|
Hola, de la siguiente manera funciona tanto en BCB6 como en las versiones actuales:
| Código: |
//Añadimos: #include <ComObj.hpp>
WideString sPath = ExtractFilePath(Application->ExeName);
WideString sFicheroPlantilla = sPath + "plantilla.docx";
WideString sFicheroGenerado = sPath + "plantilla2.docx";
Variant vWord, vDocumentos, vDocumento, vContenido, vBuscar;
const int wdFindContinue = 1, wdReplaceOne = 1, wdReplaceAll = 2;
//--- 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, // Documento
false, // Confirmar conversiones
true, // Modo de solo lectura
false, // Añadir al menu de ficheros recientes
WideString("") // Clave del documento
);
//--- Selecciona todo el documento para reemplazar
vContenido = vDocumento.OlePropertyGet("Content");
vBuscar = vContenido.OlePropertyGet("Find");
vBuscar.OleProcedure("ClearFormatting");
//--- sustituimos una palabra
// Aqui podemos meter el bucle que va a ir reemplanzando palabras
vBuscar.OleProcedure("Execute",
WideString("{{nombre}}"), // Texto a buscar
false, // Coincidir mayusculas y minusculas
false, // Solo palabras completas
false, // Usar caracteres comodin
false, // Suena como
false, // Todas las formas de la palabra
true, // Hacia adelante
wdFindContinue, // Wrap
false, // Format
WideString(Edit1->Text), // Reemplazar con...
wdReplaceAll // wdReplaceAll / wdReplaceOne
);
//--- sustituimos otra palabra
vBuscar.OleProcedure("Execute", WideString("{{direccion}}"),
false, false, false, false, false, true, wdFindContinue,
false, WideString(Edit2->Text), wdReplaceAll);
//--- salvamos automaticamente si procede y cerramos Word
if (checkGuardar->Checked)
{
vDocumento.OleProcedure("SaveAs", sFicheroGenerado);
vDocumento.OleProcedure("Close", 0xFFFFFFFF);
vWord.OleProcedure("Quit");
ShowMessage("Documento generado.");
}
vWord = vDocumentos = vDocumento = vContenido = vBuscar = Unassigned();
|
|
|
| Volver arriba |
|
 |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Vie 15 Nov, 2019 5:05 am Asunto: no funciona instanciar excel o word en office 365 |
|
|
hola estimados, tengo office 365 en mi equipo con licencia y todo pero al momento de usar la llamada
Variant xlApp = CreateOleObject("Excel.Application");
me da el siguiente mensaje de error
Cadena clase no válida: ProgID "Excel.Application"
de igual forma cuando instancio Word.Application
  , que será, alguna opcion de office 365??
agradeceria si alguien comparte expernecia al respecto |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 15 Nov, 2019 5:51 pm Asunto: |
|
|
| No tengo la 365 para probarlo, pero he descargado la versión trial de 30 días (la ultima de la 365) y tanto la versión de 32 bits como la de 64 bits me funcionan sin problema, por lo que no puedo reproducir el problema que te da. |
|
| Volver arriba |
|
 |
SumSum Lt JG


Registrado: 06 Oct 2002Mensajes: 52
|
Publicado: Vie 15 Nov, 2019 6:19 pm Asunto: |
|
|
Eres genial Leo funciona perfectamente
Ya había cambiado todo a WideString pero me faltaba
vDocumento = vDocumentos.OleFunction( "Open", sFicheroPlantilla, false, true, false, WideString("") );
Ahora funciona todo... pongo tu codigo en el Tips&Tricks original.
Mil gracias Leo.
Y a Jotny te comento que el código de Leo me funciona con Office 365 _________________ Asun |
|
| Volver arriba |
|
 |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Lun 18 Nov, 2019 1:42 am Asunto: |
|
|
| _Leo escribió: | | No tengo la 365 para probarlo, pero he descargado la versión trial de 30 días (la ultima de la 365) y tanto la versión de 32 bits como la de 64 bits me funcionan sin problema, por lo que no puedo reproducir el problema que te da. |
re instale office 365 y me funciono , no aparecia la instalacion en panel de control.
muchas gracias. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|