Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Automatizacion de tablas ja creadas en Word

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Automatizacion de tablas ja creadas en Word Responder citando

Cita:
_Leo escribió:
Un pequeño ejemplo teniendo Word abierto y con un documento activo. Si necesitas algo mas concreto avísame.

Código:
// Añadimos: #include <ComObj.hpp>
// Añadimos: #include <UtilCls.hpp> (solo en BCB4)

//--- Buscamos una instancia de Word abierta
Variant wordApp = GetActiveOleObject("Word.Application");

//--- Obtenemos el documento que esta activo
Variant wordDocument = wordApp.OlePropertyGet("ActiveDocument");

//--- Obtenemos la posicion del final del documento
Variant wordRange = wordDocument.OleFunction("Range");
wordRange.OleProcedure("Collapse", 0);
// O del principio con:
// wordRange.OleProcedure("Collapse", 1);

//--- Creamos la tabla
Variant wordTables = wordRange.OlePropertyGet("Tables");
int rows = 5, cols = 3;
Variant wordTable = wordTables.OleFunction("Add", wordRange, rows, cols);

//--- Añadimos texto en las celdas de la primera fila
Variant wordCell, wordFont;
for (int i=1; i<=cols; ++i)
{
wordCell = wordTable.OleFunction("Cell",
1 /*fila*/, i /*columna*/);
wordRange = wordCell.OlePropertyGet("Range");
// Seleccionamos un tipo de letra (opcional)
wordFont = wordRange.OlePropertyGet("Font");
wordFont.OlePropertySet("Name", "Impact");
// Escribimos en la celda
WideString str = String().sprintf("Columna %d", i);
wordRange.OlePropertySet("Text", str);
}

//--- Cambiamos el color de fondo de la primera celda de la segunda fila
wordCell = wordTable.OleFunction("Cell", 2, 1);
wordRange = wordCell.OlePropertyGet("Range");
Variant wordShading = wordCell.OlePropertyGet("Shading");
wordShading.OlePropertySet("BackgroundPatternColor", clYellow);

//--- Borramos las 3 ultimas filas
Variant wordRows = wordTable.OlePropertyGet("Rows");
for (int i=0; i<3; ++i)
{
// Selecciona la ultima celda
Variant wordRow = wordRows.OlePropertyGet("Last");
// y la borra
wordRow.OleProcedure("Delete");
}

//--- Insertamos una nueva fila al principio
wordRows.OleFunction("Add", wordRows.OlePropertyGet("First"));

//--- Insertamos una nueva fila al final
wordRows.OleFunction("Add", wordRows.OlePropertyGet("Last"));


Una observación: esto se comporta igual que cuando trabajamos manualmente
en el Word, por tanto si añadimos una segunda tabla sin separación debajo
se unen en una sola tabla, o bien cuando añadimos filas nuevas tomaran
los atributos de la primera o ultima segun donde la añadamos.




Hola, este codigo es perfecto, pero jo trabajo con plantillas ja creadas, las cuales voy modificando dependiendo de los valores.
El problema q tengo es que en la plantilla tengo creada una tabla, y por tanto no tengo q crear tabla alguna, sino seleccionar la que tengo en el documento y trabajar con ella, es esto possible ?
si no fuera possible, hay manera alguna de crear la tabla en qualquier punto del documento ?
muchas gracias

Oscar
Volver arriba
Mensaje    Asunto: Responder citando

Mira yo postee un truco en la sección de trucos acerca de borrado de filas de tablas ya creadas en ficheros de Word, imagino que te puede ser util para hacer lo que quieres, el problema de lo de _Leo es que hace referencia a una tabla que crea en ese mismo instante, y tu quieres hacerlo con la tabla ya creada, es muy sencillo a mi me costó pero al final salió, mira hay una función que te dice el número de tablas que hay en el archivo de Word, la nº1, nº2,... etc, entonces debes seleccionar el número de tabla que quieres modificar y entonces ya trabajas sobre ella normalmente al igual que ejemplo de _Leo. De hecho la mayoría de mi código está sacado de sus ejemplos y del .CHM que acompaña cada distribución de Office.

Aquí te dejo el enlace:
https://cppbuilder.es/viewtopic.php?t=7601
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Problems; Nombre Desconocido Responder citando

He intentado aplicar tu codigo a mi aplicacion, pero me da un error de Nombre Desconocido. Sad

Variant vDocument = vWord.OlePropertyGet("ActiveDocument");
Variant vShapes = vDocument.OlePropertyGet("Shapes");
// ----------------
// wordTables = vDocument.OlePropertyGet("Tables");
// wordTable = wordTables.OleFunction("Item",0);
Variant table=vWord.OlePropertyGet("ActiveDocument").OleFunction("Item",1);

He intentado crear la variante table de varias maneras pero siempre me peta, o bien por Excepcion o por este error de Nombre desconocido.
Mi duda es al assignarle el 1 ( en teoria el numero de tabla de mi documento) en mi documento solo tengo una tabla.

si me pudieras hechar un cable te lo agradeceria
muchas gracias.
Volver arriba
Mensaje    Asunto: perdona, este es el codigo correcto Responder citando

Me da una excepcion Sad

Variant vDocument = vWord.OlePropertyGet("ActiveDocument");
Variant vShapes = vDocument.OlePropertyGet("Shapes");
// ----------------
// wordTables = vDocument.OlePropertyGet("Tables");
// wordTable = wordTables.OleFunction("Item",0);
Variant table=vWord.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables").OleFunction("Item",1);
Volver arriba
Mensaje    Asunto: Responder citando

Vuelvo a ser jo, me parece haver encontrado la possible causa de la excepcio, el caso es q la tabla la tengo dentro de un cuadro de texto, ahora he creado una tabla fuera del cuadro de texto y no me da la excepcion, uhmmmm ahora la pregunta es, como puedo seleccionar una tabla q se encuentra dentro de un cuadro de texto ?

muchas gracias
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.