Cita:
Empezado por angelp4492
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);