PDA

Ver la Versión Completa : Automatizacion Word con c++


Davervidto
30-05-2011, 17:18:53
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?

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 ?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 (http://msdn.microsoft.com/)?

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


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
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.


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
De donde has sacado la maravillosa porpiedad de EndKey ¿?

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

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

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
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