 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
_tugui Invitado
|
Publicado: Sab 19 Abr, 2003 2:19 pm Asunto: tablas en word con automatización |
|
|
Gracias a la ayuda obtenida en este foro he aprendido insertar texto en un documento de word utilizando automatización y bueno, ahora quiero ir más allá insertando además de texto tablas. ¿es posible? si es así agradecería algún ejemplo o también donde podría conseguir información sobre los métodos de automatización para word.
GRACIAS.  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 03 Jun, 2003 11:57 pm Asunto: |
|
|
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. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 04 Jun, 2003 12:01 am Asunto: |
|
|
Muchísimas gracias Leo, ando un poco liadillo ahora así que guardaré este código para estudiarlo con más detenimiento en otro momento y cuando lo haya probado te informaré. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Kosky Ens


Registrado: 17 Jun 2003Mensajes: 40Ubicación: Sant Joan de les Abadesses
|
Publicado: Sab 21 Jun, 2003 11:45 pm Asunto: y para buscar texto dentro de la tabla para luego reeplazar? |
|
|
| Como lo tendria q hacer para buscar texto dentro de una tabla? |
|
| Volver arriba |
|
 |
titipower Ens

Registrado: 27 Nov 2002Mensajes: 39Ubicación: España
|
Publicado: Jue 08 Ene, 2004 8:39 pm Asunto: |
|
|
Leo me puedes decir como puedo meter la tabla en un lugar indicado mediante una marca. Vamos q no sea al principio o al final la tabla sino donde me haga falta.
Un saludo y gracias por adelantado.  |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mie 17 Mar, 2004 12:19 pm Asunto: Para seleccionar una tabla que tengo en una plantilla ? |
|
|
| _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 |
|
 |
|
|
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.
|