Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Automatizacion Word con c++ (https://www.clubdelphi.com/foros/showthread.php?t=74094)

Davervidto 30-05-2011 17:18:53

Automatizacion Word con c++
 
Buenas a todos.

Soy nuevo en el Foro pero no como programador.

Estoy con un programa intentando generar un Documento de Word, si alguien necesita codigo lo pondre, pero voy a comentaros mi problema.

Insertando una tabla desde builder C++ a Word no soy capaz de meter texto en ellas.....coloco el codigo por si huviera error..... GRACIAS

Variant Tablas,Tabla1,que_celda,dentro_celda,TablasWord,Rango;
//-- crear tabla de 2x2
TablasWord=WordDocu.OlePropertyGet("Tables");
Rango=seleccion.OlePropertyGet("Range");
Tablas=TablasWord.OleFunction("Add",Rango,2,2,1,0);

//-- meter datos en celda 1-1
Tabla1=Tablas.OleFunction("Item",1);
que_celda=Tabla1.OleFunction("Cell",1,1);
dentro_celda=que_celda.OlePropertyGet("Range");
dentro_celda.OlePropertySet("Text"," texto para celda 1-1");


Compila bien, crea bien la tabla, pero al insertar texto da el siguiente error.

Project Project1.exe raised exceptio class EOleSysError with message 'Nombre desconocido'.


GRACIAS DE NUEVO :)

Ñuño Martínez 02-06-2011 08:55:13

¿Te refieres a la línea siguiente?
Código:

dentro_celda.OlePropertySet("Text"," texto para celda 1-1");
Lo único que se me ocurre es que no exista la propiedad "Text".

Siento no ayudar más, pero hace años que no programo C++, nunca he usado Ole y el Word que uso es el de LibreOffice...

Davervidto 02-06-2011 09:04:55

Me refiero a escribir contenido dentro de ella, el metodo que utilizo parece estar correcto por otros codigos que encuentro, pero debe ser válido para la version 6, yo utilizo la 10. y no sera compatible.


Luego probando ocurre otro problema y es que...

Con la siguiente linea se escribe en el documento no ?
Código Delphi [-]
selection.OleFunnction("TypeText","hola mundo");

Al haber creado la tabla si coloco la linea de codigo, me la escribe en la celda 1-1 y no se como slair de la tabla.

Es un tanto raro.

HELPPPP GRACIAS

Ñuño Martínez 02-06-2011 10:17:16

¿Has preguntado/buscado en la MSDN?

De todas formas, antes de que saliera el XP ya leí un libro sobre programación para NT que decía que Ole no era recomendable, y poco después que es obsoleto (como le pasó antes a DDE).

Davervidto 02-06-2011 11:10:44

Entonces si no utilizo OLE ?? con que lo hago, no mire la msdn estoy en ello.
si me pudieras decir con que hacerlo supongo que lo acabaria sacando utilizo OLE porque es lo unico que he visto asta ahora.

GRACIAS de todas formas.. sabe alguien algo mas...

Ñuño Martínez 02-06-2011 11:46:28

Creo que puede hacerse con ActiveX, que es lo que se lleva ahora. Y no, tampoco lo he usado nunca (bueno, indirectamente quizá).

Davervidto 02-06-2011 12:32:16

Gracias por la indicacion vere que puedo hacer.... :D

j0seant 02-06-2011 20:55:26

Cita:

Empezado por Ñuño Martínez (Mensaje 402331)
antes de que saliera el XP ya leí un libro sobre programación para NT que decía que Ole no era recomendable, y poco después que es obsoleto (como le pasó antes a DDE).

Si esto estuviera obsoleto, Microsoft y otras muchas empresas no proveerían esta forma de controlar sus programas. Incluyendo el Office 2010, incluso la versión para 64bits (más ultimísima no puede ser).

Es el mismo sistema que se utiliza en un motón de lenguajes de script para controlar programas. Incluso el propio flamante Windows 7.

Luego si hablamos de un libro de NT (y nos referimos a una versión vieja), no podría decir que OLE está obsoleto (como mucho que OLE1 está obsoleto), ya que OLE2 nació por esas fechas.

Incluso aceptaría que OLE2 está obsoleto, por eso Microsoft dice que podemos quitar el OLE de "Automation", y llamarlo así a secas. Que no son más que una forma de usar un tipo de interfaces COM. Y esto difícilmente puede estar obsoleto ya que Windows es como un Lego de objetos COM.

Me encantaría conocer el libro donde pone que esto está obsoleto, si es posible. Gracias.

j0seant 02-06-2011 21:31:02

Cita:

Empezado por Davervidto (Mensaje 401857)
Insertando una tabla desde builder C++ a Word no soy capaz de meter texto en ellas...

Prueba con estos pequeños cambios:

Variant Tablas,Tabla1,que_celda,dentro_celda,TablasWord,Rango;
//-- crear tabla de 2x2
TablasWord=WordDocu.OlePropertyGet("Tables");
Rango=seleccion.OlePropertyGet("Range");
Tabla1 /*Tablas*/ = TablasWord.OleFunction("Add", Rango, 2, 2, 1, 0);

//-- meter datos en celda 1-1
// Tabla1=Tablas.OleFunction("Item", 1);
que_celda=Tabla1.OleFunction("Cell",1,1);
dentro_celda=que_celda.OlePropertyGet("Range");
dentro_celda.OlePropertySet("Text"," texto para celda 1-1");


Cita:

Empezado por Davervidto (Mensaje 402308)
y no se como slair de la tabla.

seleccion.OleProcedure("EndKey", 6 /*wdStory*/);
seleccion.OleProcedure("TypeText", "Fuera de la tabla");

Davervidto 03-06-2011 09:36:13

Cita:

Empezado por j0seant (Mensaje 402407)
Prueba con estos pequeños cambios:
seleccion.OleProcedure("EndKey", 6 /*wdStory*/);
seleccion.OleProcedure("TypeText", "Fuera de la tabla");

:eek:
No se como agradecertelo, pero funciona MUCHAS GRACIAS ya no sabia que mas intentar..... De donde has sacado la maravillosa porpiedad de EndKey ¿? donde podria ver documentacion de OLE y automatizacion.

Una ultima cosa se insertar imagenes pero se me colocan todas en la primera pagina del Word, eso tiene solucion, utilizo el siguiente codigo.

Código:

Variant img=WordDocu.OlePropertyGet("Shapes");       
Variant imgseparador=img.OleFunction("AddPicture","c:\\dir\\separador.jpg",false,true);//,0,0,550,10);

GRACIAS DE NUEVO :D

j0seant 05-06-2011 04:34:27

Cita:

Empezado por Davervidto (Mensaje 402458)
De donde has sacado la maravillosa porpiedad de EndKey ¿?

msdn.microsoft.com/en-us/library/ff195593.aspx

Cita:

Empezado por Davervidto (Mensaje 402458)
donde podria ver documentacion de OLE y automatizacion.

En la web de Microsoft hay mucha información. Para empezar la referencia sobre Word:

msdn.microsoft.com/en-us/library/ff841702.aspx

Cita:

Una ultima cosa se insertar imagenes pero se me colocan todas en la primera pagina del Word, eso tiene solucion, utilizo el siguiente codigo
Muchas de estas funciones funcionan en referencia a la página en la que estamos situados, aparte de mirar en la referencia de arriba sobre 'Shape', mira también sobre 'InlineShape'.

Ñuño Martínez 07-06-2011 10:41:01

Cita:

Empezado por j0seant (Mensaje 402404)
Me encantaría conocer el libro donde pone que esto está obsoleto, si es posible. Gracias.

Creo recordar que era un libro de Norton, a finales de los noventa, y creo que lo confirmaba otro de Luís Joyanes, por las mismas fechas.

Davervidto 08-06-2011 12:57:48

Gracias a los 2 de todos modos.... me ha servido para avanzar en el programa, me quedan nubes aun (crear una nueva hoja a la que tengo,colocar la imagen donde quiera) pero bueno.... no consigo moverme bien por "msdn" sera por el ingles :(.

Conocen algun libro muy bueno de Automatizacion del Office ¿?

GRACIAS !!!! :D


La franja horaria es GMT +2. Ahora son las 05:31:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi