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 

tablas en word con automatización

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: tablas en word con automatización Responder citando

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. Wink
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: y para buscar texto dentro de la tabla para luego reeplazar? Responder citando

Como lo tendria q hacer para buscar texto dentro de una tabla?
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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. Rolling Eyes
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Para seleccionar una tabla que tengo en una plantilla ? Responder citando

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