 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Invitado
|
Publicado: Mie 17 Mar, 2004 12:21 pm Asunto: Automatizacion de tablas ja creadas en Word |
|
|
| 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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 17 Mar, 2004 12:58 pm Asunto: |
|
|
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 |
|
 |
Invitado
|
Publicado: Mie 17 Mar, 2004 4:51 pm Asunto: Problems; Nombre Desconocido |
|
|
He intentado aplicar tu codigo a mi aplicacion, pero me da un error de Nombre Desconocido.
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 |
|
 |
Invitado
|
Publicado: Mie 17 Mar, 2004 4:53 pm Asunto: perdona, este es el codigo correcto |
|
|
Me da una excepcion
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 |
|
 |
Invitado
|
Publicado: Mie 17 Mar, 2004 5:07 pm Asunto: |
|
|
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 |
|
 |
|
|
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.
|