Ver Mensaje Individual
  #7  
Antiguo 28-01-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Reputación: 20
Gabo Va por buen camino
Cita:
Empezado por angelp4492 Ver Mensaje
Hola como estas.
Bueno pues mi duda es la siguiente:
He creado un programa de cálculo de Cargas térmicas para climatización y tengo todos los datos en la pantalla, mi duda es como los puedo pasar a una plantilla tipo tabla o a un documento word para podir imprimir una con todos los datos, gracias
Si quieres crear una tabla en Word:

Código:
  // CREO EL DOCUMENTO A PARTIR DE UNA PLANTILLA QUE ABRO COMO SOLO LECTURA
  Variant word, doc;
  word = Variant::CreateObject("Word.Application");
  word.OlePropertySet( "Visible", (Variant) true );
  doc = word.OlePropertyGet("Documents");
  if (FileExists(ExtractFilePath(Application->ExeName)+ "plantillas\\plantilla.doc"))
  {
     doc.OleFunction("Open", (ExtractFilePath(Application->ExeName)+ "plantillas\\plantilla.doc").c_str(), Unassigned, true);
  }else{
     MessageBox(this->Handle, "El archivo no existe", "Error" , MB_APPLMODAL | MB_OK | MB_ICONERROR);
     word.OleProcedure("Quit");
     return;
  }
  // CREO EL ENCABEZADO
  Variant Selection = word.OlePropertyGet("Selection");
  Variant Font = Selection.OlePropertyGet("Font");
  Variant Parrafo = Selection.OlePropertyGet("ParagraphFormat");
  Parrafo.OlePropertySet("Alignment","1");
  Font.OlePropertySet("Name","Verdana");
  Font.OlePropertySet("Bold","1");
  Font.OlePropertySet("Size","12");
  Selection.OleProcedure("TypeText", "TÍTULO\r\r\r");
  Parrafo.OlePropertySet("Alignment","0");
  Font.OlePropertySet("Size","10");
  Selection.OleProcedure("TypeText", "Nombre:\t");
  Font.OlePropertySet("Bold","0");
  Selection.OleProcedure("TypeText", (cboNombre->Text + "\r").c_str());
  Font.OlePropertySet("Bold","1");
  Selection.OleProcedure("TypeText", "Fecha:\t");
  Font.OlePropertySet("Bold","0");
  Selection.OleProcedure("TypeText", (txtFecha->Text + "\r\r").c_str());
 
  // Lo anterior te generará ésto:
  //
  //     TÍTULO
  //
  // Nombre: Gabo
  // Fecha: 03/12/2008
  //

 // CREO LA TABLA 
  doc = word.OlePropertyGet("ActiveDocument");
  Variant rango = doc.OleFunction("Range");
  rango.OleProcedure("Collapse", 0);
  Variant tablas = rango.OlePropertyGet("Tables");
  int rows = ListView1->Items->Count + 1; 
  // En este ejemplo creo tantas filas como ítemes en un ListView (+ 1 para los encabezados de columna)
  int cols = 2;
  Parrafo.OlePropertySet("Alignment","0");
  Variant tabla = tablas.OleFunction("Add", rango, rows, cols);
  Variant celda;
  celda = tabla.OleFunction("Cell", 1, 1);
  celda.OlePropertyGet("Range").OleProcedure("InsertAfter", "Producto");
  celda = tabla.OleFunction("Cell", 1, 2);
  celda.OlePropertyGet("Range").OleProcedure("InsertAfter", "Cantidad");
  // A continuación recorro el ListView para ir poblando de datos la tabla
  for (int i=1; i <rows; i++)
  {
      for (int j=1; j <=cols; j++)
      {
          if (j==1)
          {
             celda = tabla.OleFunction("Cell", i+1, j);
             celda.OlePropertyGet("Range").OleProcedure("InsertAfter", (ListView1->Items->Item[i-1]->Caption).c_str());
          }else{
             celda = tabla.OleFunction("Cell", i+1, j);
             celda.OlePropertyGet("Range").OleProcedure("InsertAfter", (ListView1->Items->Item[i-1]->SubItems[0][0]).c_str());
          }
      }
  }
  // Lo siguiente es para salir de la tabla y poder seguir insertando texto normal
  Selection.OleProcedure("EndKey", 6);
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.

Última edición por Gabo fecha: 28-01-2008 a las 09:28:52.
Responder Con Cita